将svn分支切换到git dcommits

6

我使用 masterdcommit 功能将代码提交到 Subversion 的 trunk 分支,并使用 rebase 从该分支更新代码。

我创建了一个名为 tc 的中间 Subversion 分支,用于合并来自两个不同分支的更改,具体操作如下:

git branch master
git svn branch tc -m "Branch for merging"
git checkout -b tcl --track tc
git merge cat #Another branch, whose changes I merged here
git commit -m 'Merged changes from cat branch'
git svn dcommit

由于一切都很顺利,我想把这个推广到trunk。 我按照以下步骤进行:

git branch master
git merge tcl
git svn dcommit

现在,由于master从指向另一个Subversion分支的分支合并而来,它试图提交到Subversion分支tc。我希望它提交到Subversion的trunk分支。
是否有git svn switch或类似的命令?
我知道我的工作流程不是最优的,欢迎提出任何改进建议。

1
我不知道你问题的答案,但是我强烈建议在实际提交之前始终执行git svn dcommit -n(干运行)。其中一个原因是确保您提交到正确的svn分支。 - Tyler
2个回答

4

这个问题所述,在带有git-svn的代码库中使用git merge不是一个好主意。

相反,你应该这样做将更改“合并”到master中:

git checkout master
git format-patch --stdout master..tcl | git am
git svn dcommit

在这种情况下,使用 git merge 的问题在于它还会将 mastergit-svn URL 设置为 SVN 的 tc 分支。而 format-patcham 的组合仅获取更改本身。

重置基底而不是合并是否会有相同的问题? - RationalGeek
如果要将一个 svn 分支上的内容提交(dcommit),就不应该对其进行 rebase,因为这样做是行不通的。svn 不支持修改历史记录。 - Daniel Hershcovich
好的,下次我不会这样做了。但如果问题已经存在,它如何解决问题呢? - jlengrand
@jlengrand 你能解释一下你的问题吗?如果你已经合并并且想要进行dcommit,你需要回到合并之前的状态,然后用上述方法重新执行合并。 - Daniel Hershcovich
是的,我已经合并了 :). 我在这里找到了一个解决方案 https://dev59.com/tnE85IYBdhLWcg3wUByz,在@dyodji的回答中找到。不过还是谢谢你的回答! - jlengrand

1
据我所知,使用--no-ff参数进行合并可以达到您想要的效果:
git branch master
git merge --no-ff tcl
git svn dcommit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接