git中的repository和branch有什么区别?

问题描述:

熟悉git的人可以帮助我理解回购和分支之间的区别。我最近被介绍给git,并且有点难以理解它们。我被告知将一个远程回购(例如foo)克隆到我的本地盒子。然后创建一个本地分支。在分支上工作(更新/创建/删除文件)并添加/提交/推送到远程服务器(例如bitbucket)。第二组眼睛检查分支后,说好。然后它被合并到开发或主分支。git中的repository和branch有什么区别?

那么存储库在这张图片中扮演什么角色?对我来说,我运行的所有操作都是针对分支的...

+1

回购包含多个分支 - 正如你所说,你*添加*分支 –

+0

不是我downvote。您可以将回购看作是远程分支机构居住的地方。本地分支是您完成所有工作的地方,本地分支与远程分支同步。 –

A 存储库是您在计算机上克隆的整个项目(目录和文件)。 A 分支是您的存储库的版本

存储库包含多个分支(=存在多个版本的存储库,并行开发了多个功能)。毕竟,对代码进行版本控制的目的是可以同时处理项目的多个方面 - 每个方案都在不同的分支中发展。 Git在“分支”旁边使用表达式“working tree”(表示工作台)。充满意象,不是吗?

相关:如果你想知道differences between 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) 

然后,当对你的功能/修复/无论什么感到满意,你可以合并branch1master

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

无论何时您克隆存储库,您都将在本地计算机上创建项目存储库的副本。此外,您还将能够git pull任何其他开发人员推送到公共存储库的新更改(了解详情herehere)。

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

为了显示分支机构和存储库之间的差异,我将描述您提到的过程,并指出正在使用的分支机构和存储库的方式。这不是一个git教程,只是一个例子,所以我们可以谈论分支和回购。

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

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

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

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你想跟踪这个分支。

其他开发人员(已经克隆了远程回购)可以通过执行拉动从远程存储库获取分支featureX-dev。

当他们检查并告诉你没关系的话,你可以将分支featureX-dev和你的本地副本中的主副本合并,并推送主副本。

但是等等!如果其他开发人员已将其更改推送到远程主服务器,该怎么办?

在当地的回购您结账主

git checkout master 

然后拉主从远程

git pull origin master 

你必须自己最后一次提交的新变化,别人做,和硕士点。 现在,如果没有人已经改变了,您可以合并您的Dev分支到主

git merge featureX-dev 

的本地副本高手有没有做过伤害。合并只会将您的提交添加到主分支。 解决冲突(如果有),然后将主机推回到远程。

+0

Randy Leberknight,感谢您花时间回复我。您的详细回复肯定会巩固对我学习过程的理解。祝福有一天! – DaeYoung