DVCS 新开发人员需要认识到的最麻烦的功能是出版流程 https://stackoverflow.com/questions/2473124/source-control-distributed-systems-vs-non-distributed-whats-the-difference/2473315#2473315:
- 您可以导入(获取/拉取)您需要的任何远程存储库
- 您可以发布(推送)到您想要的任何(裸)存储库
由此,您可以遵循一些规则来使您的问题变得更容易:
- 仅在尚未推送分支时才对分支进行变基(自上次变基后未推送)
- 只推送到裸仓库(自 Git1.7 起强制)
- follow Linus 关于变基和合并的建议 http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html
Now:
工作流程/分支模型:
每个工作流程都是为了支持发布管理流程 https://stackoverflow.com/questions/216212#216228,这是为每个项目量身定制的。
我可以添加到您提到的工作流程中的是:每个开发人员不应该创建一个功能分支,而只能创建一个“当前开发”分支,因为事实是:开发人员通常不知道他/她的分支到底会产生什么:一个功能,几个(因为它最终是一个过于复杂的功能),没有(因为没有及时准备好发布),另一个功能(因为原始功能已经“变形”),...
只有“集成商”应该在“中央”存储库上建立官方功能分支,然后开发人员可以获取该分支来重新设置/合并适合该功能的工作部分。
合并与变基(纠结与连续历史):
我喜欢你提到的我的回答(“内部开发使用 git 的工作流程描述 https://stackoverflow.com/questions/1049917/workflow-description-for-git-usage-for-in-house-development/1050628")
我正在寻找自然的工作流程:
对于修复,它可以帮助将每个修复与错误跟踪中的票证相关联,这有助于开发人员记住他/她应该在哪里(即在哪个分支上,即“用于修复”的专用分支)提交此类修改。
然后,钩子可以帮助保护中央存储库免受未经验证的错误修复或不应推送的分支的推送。 (这里没有具体的解决方案,这一切都需要适应您的环境)
如何避免产生合并冲突(由于cherry-pick)?
正如所述雅库布·纳伦布斯基 https://stackoverflow.com/users/46058/jakub-narebski in 他的回答 https://stackoverflow.com/questions/1241720/git-cherry-pick-vs-merge-workflow/1248741#1248741,挑选应该保留在极少数需要的情况下。
如果你的设置涉及大量的挑选(即“这并不罕见”),那么有些事情就不对劲了。
会在恢复中应用相同的提交(如何做到这一点?)
git revert http://www.kernel.org/pub/software/scm/git/docs/git-revert.html应该解决这个问题,但这并不理想。
如何分解为主题分支?
只要分支尚未被推送到任何地方,开发人员就应该将其提交历史重新组织(一旦他/她最终看到开发采取更明确和稳定的形式):
- 如果需要的话可以有多个分支(其中一个是由明确识别的功能组成)
- 一个分支内的一组连贯的提交(请参阅修剪 Git 签入 https://stackoverflow.com/questions/2302736/trimming-git-checkins/2302947#2302947)
适当的程序,如代码审查和毕业?
集成分支(在专用集成中)存储库可以帮助开发人员:
- 在远程集成分支之上重新调整他/她的开发(pull --rebase)
- 本地解决
- 将开发推向该仓库
- 请与积分器核实,确保不会造成混乱;)