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

mrt*_*181 3 git branch git-svn

我有以下设置

svn存储库

application
 |
 |-branches
 |  |
 |  |-develop-svn
 |
 |-trunk
Run Code Online (Sandbox Code Playgroud)

本地git存储库

master
 |
 |-develop
Run Code Online (Sandbox Code Playgroud)

主跟踪遥控器/主干

开发track remotes/develop-svn

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

当我从主人结帐开发时,我收到以下消息.

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

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

$ (develop) git svn dcommit -n
Committing to https://servername/svn/application/trunk ...
...
Run Code Online (Sandbox Code Playgroud)

它曾经提交到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 ...
...
Run Code Online (Sandbox Code Playgroud)

我的配置看起来像这样

[svn-remote "svn"]
  url = https://servername/svn/application
  fetch = trunk:refs/remotes/trunk
  branches = branches/*:refs/remotes/*
  tags = tags/*:refs/remotes/tags/*
Run Code Online (Sandbox Code Playgroud)

Mar*_*air 5

根据Pro Git,git svn dcommit根据svn-id历史上最新的内容决定推送哪个Subversion分支.该混帐SVN文档解释了它是通过在每个实例的第一个父后的历史可以追溯到完成:

如果您合并,请注意以下规则:git svn dcommit将尝试在名为的SVN提交之上提交

       git log --grep=^git-svn-id: --first-parent -1
Run Code Online (Sandbox Code Playgroud)

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

(我敢肯定,你会注意到,在svn-ids的一个URL指向开始trunksvn-develop,或什么的.)

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

  • 似乎git svn无法处理git合并.我必须使用rebase. (2认同)
  • @ mrt181:正如我上面提到的,我无法从这里的信息中猜出你需要运行什么命令.问题似乎来自于你将git分支向前和向后合并,如果你希望它们与Subversion分支对应,它确实有助于避免这种情况.你可以尝试的一件事是在`svn-develop`分支上找到最后一次提交 - 比如叫做L - 然后检查`svn-develop`分支并执行`git rebase -i L`,小心地从列表中删除从trunk获得svn-id的提交.正如我所说,只能猜测不了解提交图的更多信息. (2认同)