精通git的人可以帮助我理解回购和分支之间的区别。我最近被介绍给git并且有点难以理解它们。有人告诉我克隆一个远程仓库(例如foo)到我的本地盒子。然后从中创建一个本地分支。在分支上工作(更新/创建/删除文件)并添加/提交/推送到远程服务器(例如bitbucket)。在第二组眼睛审查分支并说好。然后它被合并到开发或主分支。
然后在这张照片中,存储库扮演什么角色?对我来说,我跑的所有操作都是反对分支...
答案 0 :(得分:15)
存储库是您在计算机上克隆的整个项目(目录和文件)。 分支是您的存储库的一个版本,换句话说,是一个独立的开发线。
存储库可以包含多个分支,这意味着存储库有多个版本。毕竟版本化代码的目的是,您可以同时处理项目的多个方面 - 每个方面都在不同的分支中进行。 Git使用表达式"工作树" (代表你的工作台)和#34;分支"。
相关:如果您想了解有关local and remote branches的更多信息。
关于在初始问题中处理分支的方式:
将远程仓库(例如foo)克隆到我的本地方框。然后从中创建一个本地分支。在分支上工作(更新/创建/删除文件)并添加/提交/推送到远程服务器
使用git这是一个很好的干净方式。我建议你总是这样做:
----A---B---C-- (REMOTE, master)
|
| (Pull to local : `git pull origin master`)
v
----A---B---C-- (LOCAL, master)
然后从您当地的主人(git checkout -b branch1
)创建一个分支,处理它,提交您的更改并推送到远程:
----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
。
答案 1 :(得分:4)
在Git中,存储库引用您的整个项目。在单个Git存储库中,您至少有一个branch。您可以使用git branch newFeature
在存储库中创建新分支,以跟踪对与特定新功能相关的代码库更改的更改。
无论何时克隆存储库,您都要在本地计算机上创建项目存储库的副本。此外,您还可以git pull
其他开发人员推送到公共存储库的任何新更改(了解详情here和here)。
答案 2 :(得分:3)
存储库包含有关项目的所有信息,包括所有更改的历史记录。每个更改都以" commit"。
的形式输入到存储库中为了显示分支和存储库之间的区别,我将描述您提到的过程,并指出分支和存储库的使用方式。这不是一个git教程,只是一个例子,所以我们可以讨论分支和repos。
通常存在一个远程存储库,用户可以从中获取副本,并且可以向其提交更改。没有直接在远程仓库中进行实际的开发工作。
用户通过克隆来获取远程存储库的第一个副本。这将在用户计算机上创建本地存储库。本地仓库是远程仓库的完整副本。
分支只是指向存储库中某个提交的指针。 在最简单的情况下,有一个名为" master"的默认分支,master指向最近的提交。 每个提交都由一个数字标识,该数字是当时回购的散列。例如,在这种情况下,master可能指向commit:
2d2cd6cf6f634e88ad19fa454fdcd2e1c26009c7
开发人员可以克隆远程仓库,并检出分支主仓。 然后创建并签出开发分支(例如featureX-dev)。
git checkout -b featureX-Dev
此时,两个分支(master和featureX-Dev)都指向同一个提交。 对文件进行更改。 将更改提交到分支featureX-dev的本地副本。 现在,在本地存储库中,分支featureX-Dev指向比master更新的提交。 将分支featueX-dev推送到远程仓库,以便进行检查。
git push -u origin featureX-dev
第一次将分支推送到遥控器时使用-u告诉git你要跟踪这个分支。
其他开发人员(已经克隆了远程仓库)可以通过执行拉动从远程存储库获取分支功能X-dev。
在他们审核并告诉您它没问题之后,您可以将分支功能X-dev与您本地仓库中的主副本合并,然后推送主。
但是等等!如果其他开发人员已经将他们的更改推送到远程主服务器怎么办?
您在本地仓库中结帐主人
git checkout master
然后从远程拉
git pull origin master
您拥有其他人所做的新更改,并且主控指向上次提交。 现在,您可以将dev分支合并到主
的本地副本中git merge featureX-dev
如果没有人改变主人,那么就没有伤害。合并只会将您的提交添加到主分支。 解决冲突(如果有),然后将主机推回远程。