精通git的人可以帮助我理解repo和branch之间的区别.我最近被介绍给git并且有点难以理解它们.有人告诉我克隆一个远程仓库(例如foo)到我的本地盒子.然后从中创建一个本地分支.在分支上工作(更新/创建/删除文件)并添加/提交/推送到远程服务器(例如bitbucket).在第二组眼睛审查分支并说好.然后它被合并到开发或主分支.
那么一个存储库在这张图片中起什么作用呢?对我来说,我运行的所有操作都是针对分支...
Val*_*the 16
一个库是整个项目,你的计算机上克隆(目录和文件).一个分支是一个版本库的版本,或者换句话说,发展独立的线.
存储库可以包含多个分支,这意味着存储库有多个版本.毕竟版本化代码的目的是,您可以同时处理项目的多个方面 - 每个方面都在不同的分支中发展.Git使用表达式"working tree"(代表你的工作台)和"branches".
相关:如果您想了解有关本地和远程分支的更多信息.
关于在初始问题中处理分支的方式:
将远程仓库(例如foo)克隆到我的本地方框.然后从中创建一个本地分支.在分支上工作(更新/创建/删除文件)并添加/提交/推送到远程服务器
这是一个很好,干净的git工作方式.我建议你总是这样做:
----A---B---C-- (REMOTE, master)
|
| (Pull to local : `git pull origin master`)
v
----A---B---C-- (LOCAL, master)
Run Code Online (Sandbox Code Playgroud)
然后从本地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)
Run Code Online (Sandbox Code Playgroud)
然后,当您对功能/修复/任何内容感到满意时,您可以合并branch1到master.
存储库包含有关您的项目的所有信息,包括所有更改的历史记录。每个更改都以“提交”的形式输入存储库。
为了显示分支和存储库之间的区别,我将描述您提到的过程,并指出正在使用的分支和存储库。这并不是一个 git 教程,只是一个示例,以便我们可以讨论分支和存储库。
通常存在一个远程存储库,用户可以获取该存储库的副本,并向其提交更改。没有直接在远程存储库中完成实际的开发工作。
用户通过克隆来获取远程存储库的第一个副本。这将在用户计算机上创建本地存储库。本地存储库是远程存储库的完整副本。
分支只是指向存储库中的提交之一的指针。在最简单的情况下,有一个名为“master”的默认分支,master 指向最近的提交。每个提交都由一个数字标识,该数字是当时存储库的哈希值。例如,在这种情况下,master 可能会指向提交:
2d2cd6cf6f634e88ad19fa454fdcd2e1c26009c7
Run Code Online (Sandbox Code Playgroud)
开发人员可以克隆远程存储库,并签出分支主控。然后创建并签出开发分支(例如featureX-dev)。
git checkout -b featureX-Dev
Run Code Online (Sandbox Code Playgroud)
此时,两个分支(master 和 featureX-Dev)都指向同一个提交。更改您的文件。将更改提交到分支 featureX-dev 的本地副本。现在,在本地存储库中,分支 featureX-Dev 指向比 master 更新的提交。将分支 featueX-dev 推送到远程存储库,以便对其进行审查。
git push -u origin featureX-dev
Run Code Online (Sandbox Code Playgroud)
-u 在第一次将分支推送到远程时使用,告诉 git 你想要跟踪这个分支。
其他开发人员(已经克隆了远程存储库)可以通过执行拉取从远程存储库获取分支 featureX-dev。
在他们审核并告诉您没问题后,您可以将分支 featureX-dev 与本地存储库中的 master 副本合并,然后推送 master。
可是等等!如果其他开发人员已经将他们的更改推送到远程主机怎么办?
您在本地仓库中签出 master
git checkout master
Run Code Online (Sandbox Code Playgroud)
然后从远程拉master
git pull origin master
Run Code Online (Sandbox Code Playgroud)
您拥有其他人所做的新更改,并且 master 指向他们的最后一次提交。现在您可以将您的 dev 分支合并到 master 的本地副本中
git merge featureX-dev
Run Code Online (Sandbox Code Playgroud)
如果没有人更换主人,就不会造成任何伤害。合并只会将您的提交添加到主分支。解决冲突(如果有),然后将 master 推送回远程。