我正在研究使用 git 进行分支管理的一些更好的点,并基于本文做出了一些决定:
http://nvie.com/posts/a-successful-git-branching-model/
现在我们在这里有一个稍微简单的场景,在远程我们有master
和development_branch
. 就所有开发人员而言development_branch
,主要是从那里进行克隆,并且只有在我们有稳定版本时才会从开发合并到主库。
现在考虑到这一点,我们每个 sprint 都有一堆故事需要完成,所以我们目前所做的是克隆development_branch
然后为我们正在处理的故事/功能创建一个新分支,例如product_description_feature
. 然后处理这个本地分支,因此如果我们需要执行另一项任务或进行某种修复,我们可以development_branch
返回并从中分支。
现在问题是围绕以这种方式工作的过程,目前安全的选择似乎是以下过程:
- 克隆
development_branch
- 为任务创建新分支(我们将
feature_a
在本例中调用它) - 提交到
feature_a
分支直到任务完成 - 切换到本地
development_branch
- 将任何新的更改从原点拉下来(通常是经常发生的事情)
- 将更改合并
feature_a
到development_branch
- 将本地推
development_branch
送到原点 - 为下一个任务创建新分支
现在效果很好,每个人都很高兴,但是在以下场景中你想更频繁地拉取:
- 克隆
development_branch
- 为任务创建新分支(我们将
feature_b
在本例中调用它) - 提交到
feature_b
分支 - 你意识到一个障碍,必须拉最新的变化
- 切换到
development_branch
- 将原点
development_branch
拉到本地 - 切换到
feature_b
- 从
development_branch
本地合并到feature_b
- 继续工作直到完成
现在这看起来很安全,每个人都很高兴,但是我不确定我是否需要切换到development_branch
并下拉然后切换回来并合并到我的本地功能分支中。那么我在这里是否过于谨慎,应该从development_branch
原产地拉到当地feature_b
分支机构?
这似乎应该没问题,因为我所做的只是将更改直接放入我的本地功能分支而不更新我的本地development_branch
,然后如果我需要推送更改,我将再次切换、拉取、合并、推送。
那么有人可以确认这是否是好的做法等吗?
也不会过多地污染问题,因为这些功能分支只存在于每台开发人员的机器上,如果有人做了一半的任务,然后其他人需要接手,会发生什么?您可以将该分支推到原点并让他们将其取下然后对其进行处理,但随后需要进一步清理,所以我认为没有很好的方法来解决这个问题,但我很想听听如何其他人解决了这个问题,而不会远程创建一个过时功能分支的荒地。
还有一些需要提及的事情,我们目前只是 ffwd 合并,所以虽然在引用的原始文章中提到了 NOT ffwd 合并,但我看不出如何在不创建大量远程分支的情况下做到这一点。我使用的是 Tortoise GIT 而不是命令行,但这不应该真正改变任何东西。