为什么git merge会将我的svn url设置为分支

时间:2010-11-24 21:16:20

标签: git-svn

在我的主结帐时,我可以执行git svn info,网址为svn://myrepo.com/trun k 在我的new_feature结帐时,svn网址为svn://myrepo.com/branches/new_feature

在我的主结帐上运行git merge new_feature后,主网址将更改为svn://myrepo.com/branches/new_feature。这使我的master和new_feature都指向某个地方,我不能再git svn dcommit到主干。

注意:这在上周工作,我唯一能想到的可能是不同的是我需要将分支更新为主干。我在我的分支上运行了git merge trunk。也许git将不再允许我现在将我的分支合并回主干?

我想知道为什么会这样,以及如何防止它发生或在发生之后修复它。

2 个答案:

答案 0 :(得分:3)

git svn没有认真尝试在svn数据模型中表示git合并(可能因为它无法正确完成)。从git日志消息中获取svn分支信息;不知怎的,new_feature首先出现在日志中。在第一次合并之后,父级会更好(编辑:git-svn可能会这样做,见下文)。

无论如何,推荐的处理方法不是记录合并(改为使用git merge --squash),或者完全切换到git。

看到你的编辑:你的合并回到主干必须是一个快进。所以git-svn遵循它看到的第一个合并的第一个父级,即将trunk合并到new_feature,直到它找到带有git-svn元数据的日志消息。使用git merge --no-ff feature_branch防止git快速合并到trunk中。

答案 1 :(得分:0)

符合git documentation

If you do merge, note the following rule: git svn dcommit will

attempt to commit on top of the SVN commit named in

git log --grep=^git-svn-id: --first-parent -1

...所以当你将new-feature分支(已经被提交并且有一个指向其分支的git-svn-id的git日志)合并到你的master分支中时合并有git-svn-id日志指向主干你给master --first-parent日志,git-svn-id指向错误的分支new-feature

这就是为什么在合并svn支持的东西时要小心的警告(或根本不要这样做)。