Answers:
我们最近偶然发现了这个确切的问题。我们非常喜欢git flow,因为它使用了很好的语义(使用与团队讨论相同的级别:“我将启动功能A”比“我将创建一个分支,将其检出”更多),而git是非常“实现”的级别(既好又有用,但有所不同)。
git feature finish
我们遇到的问题是,它将分支合并到开发中,同时我们希望发送拉取请求,并且(这很重要)由审阅者(而不是提交者)合并,以强调团队所有权。
我们当前的解决方案:
这与我们的做法是一致的,缺点是需要自己删除分支(因为我们没有进行git flow finish)。我们的下一步可能是重新实现git flow的某些部分(因为它主要是关于链接git命令)以考虑到这一点(具有完成的“清理”部分,没有合并)。
我与之合作的团队使用的流程如下:
git flow feature start module_1
develop
并与功能分支进行比较module_1
git flow feature finish module_1
develop
分支被推向GitHub的(如封闭的/合并的GitHub将自动标记拉入请求时发生这种情况)通常,所有这些过程都是由原始作者完成的,但这不是必需的。我们团队中的任何人都可以随时介入并进行此过程。他们要做的就是签出功能分支,然后继续进行此过程。谁曾运行过,git flow feature finish module_1
都会删除其本地功能分支的奢侈功能,但其他签出该分支的人如果想使用,则必须手动执行此操作git branch -D feature/module_1
。
对于修补程序,我们使用类似的方法并在完成修补程序之前在GitHub中创建拉取请求。
如果您要进行代码审查,那么我将假定您有一个包含“正式”代码的中央存储库。开发人员从该中央存储库中拉出并推送到该中央存储库。
当您使用Gerrit时,Gerrit本身便成为了中央存储库(它具有内置的SSH和HTTP服务器,使用户能够以与原来基本相同的方式与其进行交互)。使用Gerrit时,工作流程为:
使用中央存储库时,其他开发人员可以在步骤2之后看到提交的更改。Gerrit引入了代码检查工作流,因此其他开发人员仅在步骤5之后看到提交的更改。
这与git-flow(或任何其他分支方案)一起使用时效果很好,因为Gerrit支持查看在任何分支上所做的更改。