我有一个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有问题,所以我没有任何这些。
答案 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