git-svn提交到错误的分支/如何通过git-svn合并svn分支

时间:2013-01-05 13:57:56

标签: git svn git-svn branching-and-merging

我有一个SVN存储库,我使用--stdlayout选项检查了git-svn(那时,repo是空的)。

然后我在master分支上工作了一段时间。使用git svn dcommit时,它会将我的更改提交到https://my.host/repo/trunk,就像它应该的那样。

在某些时候,我用git创建了一个名为“arithmetics”的分支。后来我也想在svn中创建那个分支,所以我按照网站的建议做了git svn branch arithmetics然后是git branch --set-upstream arithmetics remotes/arithmetics。我想这是出错的地方,因为我收到了关于--set-upstream被弃用的警告。

调用git svn dcommit时,它会提交https://my.host/repo/branches/arithmetics,到目前为止一直很好。但后来我注意到,当我尝试将分支合并回master时,dcommit将提交到该分支,而不管git存储库中当前已检出的分支。

我甚至尝试从svn创建一个新的克隆,将分支合并到master中。我还尝试使用trunk明确检出git checkout -b local/trunk remotes/trunk,然后将分支合并到git svn dcommit。它总是会再次提交给分支机构。

我该如何解决这个问题?

PS:我使用git rebase进行合并,正如我读到的那样,合并提交对git-svn有问题,所以我没有任何这些。

1 个答案:

答案 0 :(得分:1)

您不能将 git branches 转发到SVN存储库,因为Git和SVN具有完全不同的分支概念。与git合并,然后调用dcommit将线性化您的历史记录(与rebase完全相同),然后推送到当前签出的分支。

以下是git svn的联机帮助页面中的重要部分:

  

MERGE TRACKING
     虽然git svn可以跟踪复制历史记录(包括分支和标记)      采用标准布局的存储库,它还不能代表合并      git内部发生在SVN用户上游的历史。因此      建议用户在git中尽可能保持历史记录的线性      以简化与SVN的兼容性(参见下面的CAVEATS部分)。

另外,caveats部分有一段专门针对您的问题:

  

不建议在您计划的分支上运行git merge或git pull   因为Subversion用户看不到任何合并,所以要提交   制作。此外,如果您从一个git分支合并或拉取   SVN分支的镜像,dcommit可能会提交错误的分支。

     

如果您合并,请注意以下规则:git svn dcommit将尝试   在

中命名的SVN提交之上提交
git log --grep=^git-svn-id: --first-parent -1