在我的主结帐时,我可以执行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将不再允许我现在将我的分支合并回主干?
我想知道为什么会这样,以及如何防止它发生或在发生之后修复它。
答案 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)
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支持的东西时要小心的警告(或根本不要这样做)。