2011-08-29 79 views
4

这是我目前的git-svn的工作流程:git-svn:我如何避免'合并分支<branchname>'提交消息?

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

这通常工作正常,在后备箱从本地分支的所有提交,而唯一的Git回放“数据丢失”的原始提交的时间戳,没有大不了。

但看起来像今天有什么不同的合并和dcommit,导致SVN回购提交消息只是“合并分支”功能'“,也许是因为功能是'小',只有2或3次提交。

我该如何避免这种情况发生,并确保所有提交和提交消息从git重播SVN回购?

回答

1

这番话应该是一个混帐合并的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”提交了上主直接完成,他们会在svn方面重播(有他们原来的评论)。
但是在这里,只有得到的合并提交被重播,并带有“通用”评论。

+0

好吧,我想我知道了,但它仍然没有回答我如何将这个特性合并到master中,以确保master将接收所有提交而不是合并“合并分支”提交。我应该从功能变为主而不是合并? – dipnlik

+1

@dipnlik:如果你想重播从'feature'到'master'的所有提交,那么是的,rebase是一个选项(只要你知道重定分支的风险,你可能已经推送到其他远程Git仓库,其他的已经被克隆了,其风险与git-svn无关:请参阅“[从上游重新启动](http://kernel.org/pub/software/scm/git/docs/git-rebase.html #_recovering_from_upstream_rebase)” – VonC

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底垫,然后重订我的所有特性分支,以保持一切美好的事物和线性的是SVN喜欢这样的方式。

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

相关问题