2011-04-05 73 views
1

如果一组8人正在开展项目,是否需要为所有成员分别设立分支机构?Git master回购分行

如果是这样

  1. 怎样一个分支主回购。
  2. 分支之间合并会发生什么?
  3. 每位会员将如何从团队的其他成员获取最新代码?

如果每个成员都在同一个回购站上工作,但仍然在他们的单个文件上,那么是否有单个分支会导致更多问题?

回答

2

这很大程度上取决于您的开发风格,您是否有责任人来合并每个人的工作并使事情正确,或者如果您在开发人员中分发这些内容。

因为每个克隆本质上都是它自己的回购,所以你所有的开发人员都会得到一个“分支”,这是他们的克隆中的一个。如果他们想要,他们可以进一步分支,但是当他们推动时,他们将(默认情况下)必须确保他们的变化与中央存储库上的任何更改(如果使用一个中央存储库作为霸王)是线性的。

至于你的问题:

1)如果你有一个中央裸露共享回购你可以做“混帐分支”要求内它来创建分支。或者,每个开发人员都可以在主人的克隆中创建一个分支,然后将该分支向上推以创建它。

2)分支之间的合并非常简单。如果存在冲突,则开发人员必须在合并期间更正这些冲突,然后将显示为合并提交。如果没有冲突,那么合并将仅显示为被添加到分支的一系列提交。

3)如果使用中央存储库设置,每个成员将定期从回购中“拉”。任何新创建的分支机构或对现有分支机构的任何更新都将与该分支机构一起提供,以便他们确保拥有最新(共享)的数据。否则,一位开发人员可能会要求另一位开发人员直接从他们的工作回购中获取有关协作代码的信息。

在我看来,除非您有人专门负责将每个开发人员的更改合并到生产分支(或主人)中,否则每个开发人员在共享回购中拥有明确的单个分支可能会比您想要的更复杂。只要确保每个开发人员知道在他们试图推动他们的变更并重新测试他们的变化(如果共享回购中有任何变化)之前就知道要提取(--rebase)。

+0

谢谢。我认为现在比现在需要更麻烦。 – jarryd 2011-04-05 16:28:53

+1

有几件事情你可能想要在你的回答中更正:1.“必须确保它们的变化与中央资料库中的任何变化是线性的”< - 线性不是必需的,只是(如果推不是强制的),远程ref是你推动的提交的祖先。 2.“如果有冲突,那么它将显示为合并提交,如果没有冲突,则合并将显示为一系列提交到分支的提交。” < - 这是不正确的 - 只要有多个父项,就会出现合并提交,除非使用了--no-ff ... – 2011-04-05 19:26:12

+0

... 3.“每个成员将定期执行”pull“操作从任何新的分支创建的任何新的分支或对现有分支的任何更新都会随之提供,这样他们就可以确保拥有最新(共享)的数据“< - 更微妙的一点,但是如果特定分支用一个git pull,远程跟踪分支将不会被更新 - 'git fetch remote-name'是最安全的方法。 – 2011-04-05 19:28:25

1

我说有一个主分支,一个开发分支,然后各功能和修复分支,而不是团队成员。考虑你将如何部署和管理代码,以找到最佳的回购管理策略。与8人,你可能会有很多提交。如果你需要从两周后排序一些代码,将会更容易计算出“Evan写这个,所以它会在evan分支”或“这是断菜单项,所以它在fix_menu分支”。当跟踪某些东西并找到分支时,您需要找到提交并按照合并进行。如果另一个人介入协助某项功能会怎么样?

  1. 理想的主分支总是生产值得,所以你不希望人们直接合并他们的变化。因此发展分支。一个人的代码在写入时可能会像魅力一样工作,但在集成时会遇到问题。开发分支(如分段/开发服务器)是发现这些问题的地方,尽可能让主人尽可能纯洁。

  2. 合并是非常简单的。当被合并的两个提交中相同的代码块不同时只有冲突。在继续合并之前,Git会标记并使您能够理清冲突。

  3. Git使用推/拉来发送和抢犯。如果您的目标有新的更改,您可以将更改推送出去,git会提醒您。拉实际上是两个操作 - 取和合并。 Fetch说让我把这个分支的最新版本或最新的所有分支从远程回购。 Fetch不会触及您当前的分支,因此它很安全。拉都将获取最新的,然后尝试将其合并到您当前的分支。

您还可以设置跟踪分支。 git branch --track <newbranch> origin/develop通过这种方式,人们可以分离出一个功能分支,同时能够轻松地引入在开发分支上进行的更新。

另一个好的建议是习惯于看提交日志可视化,让你知道不同的场景是如何出现......当三个开发商都在同一分支上工作,它看起来这样...合并使得即行看起来像这样。

如果你的团队是新的Git,我就开始了与单个回购维护者。如果每个人都在学习,事情会变得很快。让一个人管理主分支。沟通分支并关注发展。作为下一步,通过挤压来练习重新镶嵌。请记住,所有提交都将存在于分支的线性历史记录中 - 因此,当您将特性分支合并到开发中时,所有那些毫无用处的“正在进行中”提交将会使开发时间表杂乱无章。挤压然后合并保持历史清洁(并且有助于防止回滚到不完整的状态)。