git工作流:每个人都有一个分支,或者每个人都有一个主人?

时间:2010-08-11 17:02:54

标签: git workflow

使用git与多人合作时,是否更好

  1. 让每个人都能在主人中工作,并在彼此的主人之间合并,或者
  2. 让每个人都在自己的标题分支工作?
  3. 正如我所看到的那样,在(1)的情况下,尽管每个主人都充当一个分支,但每个人都希望在彼此的工作之间以大部分线性流合并,而在(2)中,每个人都应该合并进入他们的分支的公共主人,并在他们准备好时将更改从他们的分支推送到公共主服务器。

    具有使用git在大中型团队工作经验的人是否可以发表任何评论?哪种方法最适合您的团队?我想第三种选择是始终使用特征分支而不是人员分支,尽管我认为这与(2)从这个问题的观点基本相同。

    我想,在(1)和(2)中,一个人负责将变更拉到“官方”主人。如果不止一个人作为官方主人的推进权,这将如何延续?

3 个答案:

答案 0 :(得分:3)

git中的分支名称是存储库的本地名称。可以将pushpull配置为匹配远程存储库上的相同名称,但这是可选行为。如果您有一个中央存储库,那么您希望master具有确定性。个别开发人员将他们的工作分支称为他们的本地存储库是真正的品味问题。有些人将他们的本地master作为他们的工作分支,而其他人将使用一个命名的dev分支。

如果您的开发人员能够做到这一点,那么真正精明的方法就是使用功能或主题分支,这样您就可以推送和交换“自动执行功能”分支,而不是拥有“Mike的工作”分支。很明显,没有人需要做很多早期的来回合并。

答案 1 :(得分:0)

DVCS将该出版物引入othogonal dimension to branching

这意味着DVCS中的分支有两个角色:

  1. 经典之一:code isolation:您隔离分支中代码的历史记录(修订列表)
  2. 新的:发布:你从repos到repos重新提交你的提交。
  3. Git允许“私人提交”,即您可以根据需要提交(然后您可以clean your history of commits)。
    如果你在master中这样做,这对于发布是不利的:因为master是克隆repo时默认可见的分支,任何克隆你的repo的人都不会获得稳定的状态,而是正在进行的工作的快照。

    私有提交意味着:在未发布的分支中提交 你可以随意打电话给你。

    任何要推/拉的分支都不应该在资源名称之后调用(例如“VonC_branch”),而是始终在功能或更一般的版本管理主题之后(如'{{1} }','public','next',...)

    私有分支和公共分支之间的区别在于您在每个分支中允许的提交历史记录:

    • 您希望在私有分支中提交多少次提交(您只需指定正确的评论,以便通过patchV1rebase --interactive操作{/ 1}}来促进日后重新排序
    • 在公共分支中提交“一致”(每次提交都是完整的,表示一个至少可以编译并且可以测试的稳定状态,即使这些测试失败)
      例如,主分支的标准甚至比标准更严格(例如“测试必须通过”

    因此,要决定如何使用Git分支,您需要考虑发布方面。

答案 2 :(得分:0)

对于中型到大型团队,您很可能希望拥有“官方”master分支的集中存储库。

另一个流行的选择是拥有一个集成商,它基本上是开发人员和中央仓库之间的中间人。您如何决定这取决于您的团队决定的最合适的方法。对Pro Git book的差异进行了很好的描述。

使用共享仓库,它归结为开发人员个人偏好(以及一些团队协议)是否直接提交到他们的本地master,或使用单独的dev分支。我的想法是,在dev分支中保留本地更改是一个更好的选择,但对于习惯于集中SCM的开发人员来说稍微麻烦一些。

单独的dev分支的好处是,只需在git pull上运行master,就可以更轻松地跟踪代码库中的新提交。干净的主人让开发人员总是在必要时检查最新的公共代码。如果您pull中的master发生了更改,它会在origin/master分支中合并到您未发布的提交中。这将在master中创建一个新的合并提交,如果更改被推回master,则会显示。也许这就是你想要的,但它可以使提交历史看起来有些混乱。

使用dev分支,您可以轻松地对master进行重新定位,以使提交历史保持线性。如果没有dev分支,git pull --rebase中的master将具有相同的效果,但很容易忘记此步骤。

基本上,使用私有跟踪分支(如dev)可以让开发人员更灵活地接受如何将公共变更接受到本地分支机构。它还使集中式repo更容易保持过多的合并提交。唯一的缺点是它需要开发人员的一些额外努力,但从长远来看会增强git的最终利用。