你会遇到的一个问题是git svn rebase
实际上会重写git仓库的提交历史记录。这将与任何人从该回购协议中产生冲突。最好的解决方案是每个人都可以自己到git svn
svn仓库。
如果你想建立一个远程回购所以你可以共享分支,那么每个人将只需要知道,如果远程的Git分支复位至SVN,他们将不得不强制应用新的修订历史记录他们的地方git回购。
其他人可以通过使用git pull --force
强制他们的本地回购配对遥控器。虽然被警告,但是因为这会使修改点之后的任何提交失效。例如,假设我们有以下提交结构:
D----E topic
/
A----B----C----F master
然后我们使用git pull --force
更新我们的本地仓库,然后改变提交的开始B
的SHA1。我们的新的结构将类似于如下:
D----E topic
A----G----H----I master
注意如何提交D
和E
现在浮在奇迹的土地?这是因为分支点现在不再匹配B
,而现在是G
。
要解决此问题,您需要确保您的本地分支点来自不会因运行git svn rebase
而被更改的提交。在拉动遥控器之后,您可以将您的本地分支git rebase
更新到更新远程分支。
假设我们犯了一个错误,即从提交点创建一个分支,导致上述的浮动仙境。那么,在你发起一个git pull --force
之前,你必须挥动混乱的魔杖。像这样:
糟糕。 B
将在pull
中被覆盖。
D----E topic
/
A----B----C----F master
好了,那么我们只需要git rebase A topic
上承诺,将不会改变我们的变化。
D'---E' topic
/
A----B----C----F master
然后,一旦变化已经来了,我们可以git rebase G topic
,让我们变回我们知道他们去。
D'---E' topic
/
A----G----H----I master
希望这解释了尝试运行中央访问git回购一边svn回购的痛苦。
谢谢。如何将“新修订历史”应用于本地回购? – Rocky
'git pull --force'将强制本地回购接受远程更改。 **被警告**:在重写点之后存在的任何本地提交将无效。如果这没有意义,那么我会用更深入的解释来编辑我的答案。 –
“无效”是什么意思?失去改变? – Rocky