我有一个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”之后,我几乎扯掉了裤子。它正在Subversion中使用旧的发布分支!
为什么远程跟踪分支因进行rebase而改变?
我如何解决我自己陷入的局面?
编辑:好的,为了让自己离开,我相信我可以做到以下几点:http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html#svn.branchmerge.basicmerging.undo
由于new_release分支上只有少数提交被拉到old_release,我可以在SVN repo上单独手动还原它们。我仍然对这里发生的事感到困惑。
EDITx2:是的,这里有一些验证步骤。
git svn info
并观察网址指向SVN中的正确位置git rebase <other_branch>
git svn info
并观察更改的URL以指向SVN中的其他分支位置答案 0 :(得分:9)
在使用git-svn时,您似乎犯了一个常见的错误。
没有&#34;追踪分支&#34;在git-svn中。它总是通过第一父历史确定分支的URL,直到第一次使用&#34; git-svn-id:&#34;签名符合。此签名附近的URL是将推送提交的URL。但是请注意,有一个双重检查:签名附近的URL和修订版与.git / svn / refs目录中的数据结构进行比较,如果URL和修订版与它们相矛盾(对于重新提交的提交也是如此,因为rebase没有&# 39;触摸那些结构),不予考虑。因此,旧的分支URL是第一个没有重新定位的提交URL。
如果您想要纯粹的Git体验,可以尝试SubGit作为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