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) |
然后从本地主服务器(
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) |
号
然后,当您对您的功能/修复/任何东西感到满意时,您可以将
在Git中,存储库引用整个项目。在单个Git存储库中,至少有一个分支。您可以使用
每当克隆存储库时,都会在本地计算机上创建项目存储库的副本。此外,您还可以
存储库包含有关项目的所有信息,包括所有更改的历史记录。每个更改都以"提交"的形式输入到存储库中。
为了显示分支和存储库之间的区别,我将描述您提到的过程,并指出分支和存储库的使用方式。这并不是一个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推回到远程。