0

我正在实施 Vincent ( http://nvie.com/posts/a-successful-git-branching-model/ ) 成功的 git 合并模型。所以我在我们的 gitorious 服务器上有一个主存储库“main”,它有 2 个主要分支:master 和 develop。我团队的每个开发人员都应该将其分叉到个人存储库中,并在本地创建此个人存储库的克隆。他们应该处理他们的个人问题,然后创建一个拉/合并请求。

场景:我需要开发一个很酷的新功能。

  1. 我的起源指向我的个人叉子。
  2. 我将“main”添加为附加遥控器。
  3. 我执行“git fetch -p main”,它应该从 main 获取所有更改并同步我的本地。
  4. 我从开发“git checkout -b feature/cool_feature develop”创建了一个新分支。
  5. 添加,提交...
  6. 问题 1。
  7. 问题2
  8. 我打开一个合并请求
  9. 集成经理批准并合并到 main/develop
  10. 问题 3

这些是我的问题:

  1. 在我进入该功能的过程中,我应该获取“主要”吗?如果是,我应该合并到我的功能分支还是我的本地开发分支?
  2. 完成我的功能后,我应该将它与我的本地开发分支合并并推送到源(个人存储库),还是将它分开并仅推送分支(创建远程分支)?
  3. 如果一个分支被推送到我的个人存储库中,我现在应该删除它吗?

希望清楚,提前Tnx。

4

2 回答 2

1

首先要小心“成功的 git 分支模型”。- 它可能完全适合您的项目,也可能完全错误。- 这总是视情况而定。

有什么理由,为什么您需要为每个开发人员单独的存储库?- 每个开发人员都必须克隆主存储库来处理文件,因此每个开发人员已经拥有一个个人存储库作为工作副本。

为什么不只为每个功能提供一个中央存储库和一个分支?如果您需要,您可以限制谁能够推送哪个分支。

于 2013-06-01T08:48:48.710 回答
1

第 3 步仅更新您的远程引用。它不会同步到您的本地分支机构。因此,在您运行的第 4 步中git checkout -b feature/cool_feature develop,您实际上是从过时的本地分支创建分支,除非您正在做其他事情来更新它。

问题 1

像往常一样,这取决于。从主线合并可能会引入“无用的提交”(正如 Linus 所说的那样),并且会使历史变得混乱。在这里,变基通常是更好的选择,特别是如果分支确实是您的私有分支。如果该分支必须与其他人共享以供他们构建,那么您会通过 rebase 进入一些有趣且危险的领域,合并成为更好的解决方案。

更具体地说,如果在您的开发周期中在上游引入了新的更改,我会在闲暇时重新设置并将它们合并到我的分支中。我可能会等到我的功能完全实现,如果它不需要那么长时间来实现,或者我可能会立即执行,特别是如果在我工作的区域附近进行了更改。

问题2

如果你使用rebase,那么main已经被合并了。如果你不 rebase,我倾向于避免额外的合并,除非我认为它会导致问题,并且有运行的测试和最终的集成结果。

您会将其推送到分支,而不是合并到develop.

问题 3

分支合并到main存储库后,您可以自由删除分支。

其他意见

注意@michas 的建议。根据您的情况,NVIE 的模型可能不适合您。

另外,您可能没有想到这一点,但是您将如何在develop本地保持最新状态?它跟踪哪个分支:origin/developmain/develop?我要求阐明几个问题。首先,您需要以某种方式使您的本地开发分支保持最新。如果它正在跟踪origin/develop,那么你需要做一些事情,比如git merge --ff-only main/develop将新的提交 git 到你的分支上。或者,您可以改为创建本地develop分支轨道: . 这意味着您在 gitorious 中的个人 repo 将有一个过时的分支,但它不会造成任何伤害。maingit branch --set-upstream develop main/developdevelop

FWIW,因为本地分支没有更新git fetch,并且git pull可能引入无用的提交,我一直在使用一个名为的脚本git-ffwd来保持我的分支是最新的。只要分支不发散,它就会进行提取并更新本地跟踪分支。

最后,如果您遵循@michas 的建议并且仅在中央存储库中工作,则有关遥控器和保持最新状态的一些问题。这就是我们在我的工作场所实施的,并且效果很好。

于 2013-06-01T09:06:23.140 回答