繁体   English   中英

Git分支模型问题

[英]Git branching model problems

我正在实施Vincent成功的git合并模型( http://nvie.com/posts/a-successful-git-branching-model/ )。 所以我在我们的主要服务器上有一个主存储库“main”,有两个主要分支: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提前。

首先要小心那个“成功的git分支模型”。 - 它可能非常适合您的项目,也可能完全错误。 - 这总是取决于具体情况。

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

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

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

问题1

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

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

问题2

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

你会把它推到分支,而不是合并到develop

问题3

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

其他观察

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

此外,您可能没有想到这一点,但您如何在本地保持最新develop 它跟踪哪个分支: origin/developmain/develop 我要求揭露一些问题。 首先,您需要以某种方式使本地开发分支保持最新状态。 如果它是跟踪origin/develop那么你需要做一些像git merge --ff-only main/develop来git新提交到你的分支上。 或者,你可以让你的本地develop分支跟踪main代替: git branch --set-upstream develop main/develop 这意味着你的个人回购将有一个过时的develop分支,但它不会造成任何伤害。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM