"git rebase <branch>" git svn 存储库更改了远程跟踪目标?



我有一个git svn repo。我这里有多个释放分支。我正在准备一个新版本,作为其中的一部分,我认为我会从上一个发行版中进行" git rebase",以介绍尚未合并的任何更改。

所以我设置了我的分支...

git branch new_release remotes/svn-branches/new_release
git branch old_release remotes/svn-branches/old_release

,然后我做了重新选择...

git checkout new_release
git rebase old_release
# watch it pull a bunch of commits
git svn dcommit
    Committing to https://svn.mysvn.net/repo/releases/old_release ...

我做了" SVN DCommit"后,我几乎抓了裤子。它在颠覆了我的旧版本分支!

为什么远程跟踪分支由于进行重次而改变?

我如何解决自己进入自己的情况?

编辑:好的,为了让自己离开,我相信我可以做以下操作:http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerge.html#svn.branchmerge.basicmerge.undo.undo

,由于在new_release分支上只有少数几个被拉到old_release上的提交,所以我可以单独手动将它们复杂在SVN库中。我仍然对这里发生的事情感到困惑。

editx2:是的,这里有一些验证的步骤。

  1. 设置两个Git分支,远程跟踪到SVN分支
  2. 查看其中一个分支
  3. 运行git svn info并观察URL指向SVN中的正确位置
  4. 运行git rebase <other_branch>
  5. 再次运行git svn info,观察到URL更改为指向SVN中的另一个分支位置

看起来您在使用git-svn时犯了一个常见的错误。

Git-Svn中没有"跟踪分支"之类的东西。它始终将分支的URL确定为第一父母历史记录,直到第一个使用" git-svn-id:"签名为止。该签名附近的URL是将推动提交的URL。但是请注意,有一项双检查:将签名附近的URL和修订与.git/svn/refs目录中的数据结构进行比较,如果URL和修订版与它们相矛盾(对于重新进行的提交是正确的,因为rebase不会触及这些结构),不考虑。因此,旧的分支URL是未重新构成的提交的第一个URL。

如果您想要纯git体验,则可以尝试作为git-svn替换。由于2.0,因此允许创建SVN存储库的可写的纯GIT镜像,并注意同步和并发。运行

$ subgit configure --svn-url <SVNURL> project.git
$ #adjust projectX.git/subgit/{config,authors.txt,passwd} 
$ subgit install project.git
$ git clone project.git project/

安装后,您可以将其用作普通的git存储库。因此,对于您来说,您正在运行:

$ git checkout new_release
$ git rebase old_release
$ git push origin new_release

最新更新