git中存储库和分支有什么区别?


What is the difference between repository and branch in git?

熟悉git的人可以帮助我理解repo和branch之间的区别。我最近被介绍给Git,很难理解他们。我被告知将远程回购(如foo)复制到本地设备。然后从中创建一个本地分支。在分支上工作(更新/创建/删除文件),并向远程服务器(例如bitback)添加/提交/推送。第二组眼睛后,检查树枝并说"好"。然后它被合并到开发或主分支。

那么存储库在这张图片中扮演什么角色呢?对我来说,我所有的行动都是针对分支机构的…


存储库是您在计算机上克隆的整个项目(目录和文件)。分支是存储库的一个版本,换句话说,是一个独立的开发线。

存储库可以包含多个分支,这意味着存储库有多个版本。毕竟,对代码进行版本控制的目的是,您可以同时处理项目的多个方面——每个方面都在不同的分支中发展。Git在"分支"旁边使用表达式"工作树"(表示工作台)。

相关:如果您想了解更多关于本地和远程分支的信息。

关于在最初问题中处理分支机构的方式:

Clone a remote repo (e.g. foo) to my local box. Then create a local branch out of it. Work (update/create/delete files) on the branch and add/commit/push to the remote server

这是一种与Git合作的好方法。我建议你总是这样做:

1
2
3
4
5
6
7
----A---B---C--     (REMOTE, master)

            |
            |       (Pull to local : `git pull origin master`)
            v

----A---B---C--     (LOCAL, master)

然后从本地主服务器(git checkout -b branch1创建一个分支,处理它,提交更改并推送到远程:

1
2
3
4
5
6
7
8
9
10
11
----A---B---C------     (REMOTE, master)

----A---B---C---D--     (REMOTE, branch1)

               ^
               |
               |        (Push to remote : `git push origin branch1`)

----A---B---C------     (LOCAL, master)
             \
              D----     (LOCAL, branch1)

然后,当您对您的功能/修复/任何东西感到满意时,您可以将branch1合并到master中。


在Git中,存储库引用整个项目。在单个Git存储库中,至少有一个分支。您可以使用git branch newFeature在存储库中创建一个新的分支,以跟踪您对代码库所做的与特定新特性相关的更改。

每当克隆存储库时,都会在本地计算机上创建项目存储库的副本。此外,您还可以git pull任何其他开发人员向公共存储库推送的新更改(在这里和这里了解更多信息)。


存储库包含有关项目的所有信息,包括所有更改的历史记录。每个更改都以"提交"的形式输入到存储库中。

为了显示分支和存储库之间的区别,我将描述您提到的过程,并指出分支和存储库的使用方式。这并不是一个Git教程,只是一个例子,这样我们就可以讨论分支和回购。

通常存在一个远程存储库,用户可以获取其副本,并可以将更改提交到该存储库。远程回购中没有直接完成实际的开发工作。

用户通过克隆来获取远程存储库的第一个副本。这将在用户计算机上创建本地存储库。本地回购是远程回购的完整副本。

分支只是指向存储库中某个提交的指针。在最简单的情况下,有一个名为"master"的默认分支,master指向最近的提交。每个提交都由一个数字标识,这是此时回购的散列值。例如,在这种情况下,master可能指向commit:

1
2d2cd6cf6f634e88ad19fa454fdcd2e1c26009c7

开发人员可以克隆远程repo和签出分支主机。然后创建并签出开发分支(例如Featurex dev)。

1
git checkout -b featureX-Dev

此时,两个分支(master和featurex dev)都指向同一提交。对文件进行更改。将更改提交到分支featurex-dev的本地副本。现在,在本地存储库中,分支featurex dev指向比master更新的提交。将分支featuex dev推到远程repo,以便可以查看它。

1
git push -u origin featureX-dev

第一次将分支推到远程时使用-u来告诉Git您要跟踪此分支。

其他开发人员(已经克隆了远程repo)可以通过执行pull从远程存储库中获取branch featurex dev。

在他们检查并告诉你没问题之后,你可以将分支featurex dev与本地repo中的master的副本合并,并推送master。

但是等等!如果其他开发人员已经将他们的更改推送到远程主机上,会怎么样?

您在本地回购中结帐主

1
git checkout master

然后从遥控器上拔出主机

1
git pull origin master

您有其他人所做的新更改,主控点指向他们的最后一次提交。现在可以将dev分支合并到master的本地副本中

1
git merge featureX-dev

如果没有人改变主人,就不会造成伤害。合并只会将您的提交添加到主分支。如果创建了冲突,请解决冲突,然后将master推回到远程。