这是我目前的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的提交和提交消息?
答案 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将提交我期望的内容。