【问题标题】:What is the difference between repository and branch in git?git中的存储库和分支有什么区别?
【发布时间】:2017-05-14 21:18:22
【问题描述】:

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

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

【问题讨论】:

  • repo 包含多个分支 - 正如您自己所说,您添加了一个分支
  • 不是我的反对意见。您可以将 repo 视为远程分支所在的地方。本地分支是您完成所有工作的地方,本地分支与远程分支同步。

标签: git


【解决方案1】:

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

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

相关:如果您想了解更多关于local and remote branches的信息。


关于你最初问题中处理分支的方式:

克隆一个远程仓库(例如 foo)到我的本地盒子。然后从中创建一个本地分支。在分支上工作(更新/创建/删除文件)并添加/提交/推送到远程服务器

这是使用 git 的一种不错且干净的方式。我建议你总是这样:

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

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

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

然后从您的本地 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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      为了显示分支和存储库之间的区别,我将描述您提到的过程,并在使用分支和存储库的过程中指出。这不是一个 git 教程,只是一个例子,所以我们可以讨论分支和 repos。

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

      用户通过克隆远程存储库获得他们的第一个副本。这将在用户机器上创建一个本地存储库。本地仓库是远程仓库的完整副本。

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

      2d2cd6cf6f634e88ad19fa454fdcd2e1c26009c7
      

      开发人员可以克隆远程 repo,并签出分支 master。 然后创建并签出开发分支(例如 featureX-dev)。

      git checkout -b featureX-Dev
      

      此时,两个分支(master 和 featureX-Dev)都指向同一个提交。 更改您的文件。 将更改提交到分支 featureX-dev 的本地副本。 现在,在您的本地存储库中,分支 featureX-Dev 指向比 master 更新的提交。 将分支 featureX-dev 推送到远程仓库,以便对其进行审查。

      git push -u origin featureX-dev
      

      第一次将分支推送到远程时使用 -u 告诉 git 你要跟踪这个分支。

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

      在他们审核并告诉您没问题后,您可以将分支 featureX-dev 与您本地 repo 中的 master 副本合并,然后推送 master。

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

      您在本地 repo 中的结帐大师

      git checkout master
      

      然后从远程拉出master

      git pull origin master
      

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

      git merge featureX-dev
      

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

      【讨论】:

      • Randy Leberknight,感谢您抽出宝贵时间回复我。您的详细回复肯定会巩固对我一直在学习的过程的理解。祝你有美好的一天!
      猜你喜欢
      • 2018-04-20
      • 2015-09-15
      • 2017-08-20
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多