git-svn:如何避免“合并分支<branchname>”提交消息?</branchname>

时间:2011-08-29 17:39:23

标签: workflow git-svn

这是我目前的git-svn工作流程:

git checkout -b feature master
# hack commit hack commit
git checkout master
git svn rebase
git merge feature
git svn dcommit

这通常可以正常工作,git在主干上重放所有来自本地分支的提交,唯一的“丢失数据”是原始提交的时间戳,没什么大不了的。

但看起来今天有一些不同的合并和dcommit导致SVN repo上的提交消息只是“合并分支'功能'”,可能是因为该功能'较小',只有2或3提交。

如何避免这种情况发生并确保在SVN存储库中重放所有来自git的提交和提交消息?

2 个答案:

答案 0 :(得分:1)

该评论应该是git合并的dcommit的结果,如“Is git-svn dcommit after merging in git dangerous?”中所示:

(master)$> git log --graph --oneline --decorate
* 56a779b (work, master) Merge branch 'work'
|\  
| * af6f7ae msg 3
| * 8750643 msg 2
| * 08464ae msg 1
|/  
* 21e20fa (git-svn) last svn commit

换句话说,如果这三个“msgx”提交是直接在master上完成的,那么它们就会在svn端重放(带有原始注释)。
但是在这里,只有生成的合并提交才会被重放,并对其进行“通用”评论。

答案 1 :(得分:0)

您需要先从功能分支重新设置:

git checkout feature
git rebase master

这可以确保当您合并到主服务器时,您只能获得快进而不是实际合并。

我的流程通常更像是这样:

git checkout master
git svn rebase
git checkout feature
<hack...hack...hack>
git commit
git rebase master
git checkout master
git merge feature

我只是确保做一个svn rebase,然后重新定义我所有的功能分支,以保持一切美观和线性,就像SVN喜欢它一样。

此外,如果您不了解它,则有git svn dcommit --dry-run选项。我总是使用--dry-run并计算提交次数,以确保git-svn将提交我期望的内容。