我有一个git svn repo.我在这里有多个发布分支.我正在准备一个新的版本,作为其中的一部分,我想我会从之前的版本中做一个"git rebase"来完成任何尚未合并的更改.
所以我建立了我的分支......
git branch new_release remotes/svn-branches/new_release
git branch old_release remotes/svn-branches/old_release
Run Code Online (Sandbox Code Playgroud)
然后我做了改变...
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 ...
Run Code Online (Sandbox Code Playgroud)
在我做了"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
并观察URL指向SVN中的正确位置git rebase <other_branch>
git svn info
再次运行并观察更改的URL以指向SVN中的其他分支位置看起来你在使用git-svn时遇到了一个常见的错误.
在git-svn中没有"跟踪分支"这样的东西.它总是通过第一父历史确定分支的URL,直到满足第一次提交"git-svn-id:"签名为止.此签名附近的URL是将推送提交的URL.但请注意,有一个双重检查:签名附近的URL和版本与在git的/ SVN/refs目录数据结构进行比较,如果URL和版本违背他们(即用于衍合的提交真实的,因为底垫不碰那些结构),没有考虑.所以旧的分支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/
Run Code Online (Sandbox Code Playgroud)
安装后,您可以将其用作普通的Git存储库.所以对于你的例子你运行:
$ git checkout new_release
$ git rebase old_release
$ git push origin new_release
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1155 次 |
最近记录: |