2012-09-26 216 views
2

我最近一直在使用git-svn来通过git来管理一个旧的svn仓库。Git-svn合并和提交分支

我最近一直在说我喜欢这个创建了一个分支工作:
git checkout -b local-branch svn-branch

我有那么由于该分支一直在努力,并使用commiting回的svn分支:
git svn dcommit

现在是时候合并本地分支回主,我试图做到以下几点:
git checkout master
git merge local-branch

到目前为止,这么好。现在我想提交合并回颠覆,所以我试试这个:
git svn dcommit

不过,现在我的主人是犯回SVN分支的分支里而不是主干,因为我本来期望。有没有什么我错过了,或者这种合并只是不建议像这样的svn分支之间合并?

作为一个方面说明,我反而通过svn进行合并,但是我想尽量避免使用svn。处理这个问题的首选方法是什么?

回答

3

git svn dcommit总是发送更改到git-svn-id签名中指定的url,该签名是HEAD历史记录中提交的第一条母链最新的。

我想,你的合并被快速转发(即主引用可从本地分支/ svn分支),所以它只是通过“git merge”设置为本地分支,而不是合并提交创建。

作为一项建议,总是在“git merge”中使用--no-ff选项,因为Subversion没有像快速合并这样的概念。 (你可以在config中设置这个选项(merge.ff=true)作为默认设置[或branch.master.mergeoptions为Git < 1.7.6的“--no-ff”],但要注意,如果你使用更多的“git pull”比1个远程)

为了避免SVN和/或git-svn:如果你有权访问版本库服务器,你可以看看SubGit项目,它提供了纯粹的Git(而不是git-svn)接口到Subversion。即使在SubGit的情况下--no-ff选项也是强烈推荐的,因为无法将快速合并(和快速前进的rebase)与其他提交中的分支删除和重新创建区分开来(这对于任何Git < - > SVN翻译都是如此工具)。

但也许任何其他原因(我不知道任何其他)在最新的提交信息中导致“git-svn-id”与分支URL(而不是主干URL)。无论如何,确保主人指向一个正确的提交。

+0

谢谢,我试了一下,在我的分支中添加一个新文件,然后用'git merge local-branch --no-ff'将它合并回主文件,然后用'git svn提交主文件到svn dcommit',并且这次它已经提交给中继。 – carl