为什么git svn远程跟踪停止工作?

时间:2011-03-22 12:55:30

标签: git branch git-svn

我有以下设置

svn repository

application
 |
 |-branches
 |  |
 |  |-develop-svn
 |
 |-trunk

本地git存储库

master
 |
 |-develop

master track remotes / trunk

开发track remotes / develop-svn

由于某种原因,开发停止跟踪develop-svn。

当我从主人结账时,我得到以下信息。

$ (master) git checkout develop
Switched to branch develop
Your branch is ahead of 'develop-svn' by 59 commits.

当我尝试提交到svn存储库时,它会尝试更新远程主干。

$ (develop) git svn dcommit -n
Committing to https://servername/svn/application/trunk ...
...

过去曾致力于https://servername/svn/application/branches/develop-svn

我已经尝试过这个命令,但没有帮助:

$ (master) git branch --set-upstream develop develop-svn
Branch develop set up to track local refs/remotes/develop-svn.
$ (master) git checkout develop
Switched to branch develop
Your branch is ahead of 'develop-svn' by 59 commits.
$ (develop) git svn dcommit -n
Committing to https://servername/svn/application/trunk ...
...

我的配置看起来像这样

[svn-remote "svn"]
  url = https://servername/svn/application
  fetch = trunk:refs/remotes/trunk
  branches = branches/*:refs/remotes/*
  tags = tags/*:refs/remotes/tags/*

1 个答案:

答案 0 :(得分:5)

According to Pro Gitgit svn dcommit根据历史记录中最新的svn-id决定要推送到哪个Subversion分支。 git svn documentation解释了这是通过返回每个实例中第一个父项之后的历史记录来完成的:

  

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

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

因此,您必须确保要提交的分支的最新提交是合并的第一个父级。否则会出现混乱,特别是如果第一个父级是同一SVN分支上的旧提交。

(我相信你会注意到,svn-id以一个指向trunksvn-develop或其他任何内容的网址开头。)

所以,如果你在你所在的分支上尝试该命令,它是否找到了你期望的提交?或者,您是否可能以某种方式进行重新定位或合并,从而使最近的git svn提交(在上面的意义上)来自Subversion中的trunk而不是develop-svn分支?