我在相當大的回購(〜8000提交)上運行git filter-branch
以刪除某些二進制文件,但現在當我執行git svn rebase
以使我的回購保持最新狀態時,會導致大量衝突。我猜這是因爲這兩個命令都涉及重寫歷史。Git svn rebase導致衝突
有沒有什麼辦法可以在我的過濾器分支沒有這些衝突後,從SVN同步到Git?未來的任何債務還會導致這些問題嗎? (我只同步從SVN到Git的一種方式)
我在相當大的回購(〜8000提交)上運行git filter-branch
以刪除某些二進制文件,但現在當我執行git svn rebase
以使我的回購保持最新狀態時,會導致大量衝突。我猜這是因爲這兩個命令都涉及重寫歷史。Git svn rebase導致衝突
有沒有什麼辦法可以在我的過濾器分支沒有這些衝突後,從SVN同步到Git?未來的任何債務還會導致這些問題嗎? (我只同步從SVN到Git的一種方式)
正如我所看到的,沒有什麼可以使filter-branch
和svn rebase
兼容。您正在重寫與遙控器有關係的歷史記錄。因此,您可以更改提交散列並使SVN rev_map的映射完全無用。
如果filter-branch
後遠程刪除,在這種情況下,它根本就沒有關係這將是一個不同的故事,但因爲它代表我看到沒有辦法,使這項工作。
已發送到SVN(通過git svn dcommit)的提交不應該進一步更改,因爲它會導致如您所見的衝突。
在一個只有git的場景中,理論上你可以做一個git push --force(儘管如果你通過repo與其他人一起工作,這並不鼓勵),但是SVN不允許這樣做。
所以,你不能重寫已經發送到Subversion服務器的內容。如果二進制文件位於subversion服務器上,filter-branch無論如何都不會幫助你。此外,如果您在服務器上使用SVN工具來刪除二進制文件,您需要重新檢查git副本 - git-svn數據在此時將無效。
你現在可以做的唯一的事情是重設你的主分支到origin/trunk。對於新出現的衝突,我的猜測是filter-branch混淆了$ GIT_DIR/svn/** /。rev_map。*中的git commit和svn修訂號之間的關係(請參閱git- scm.com/docs/git-svn:CAVEATS/FILES)。 此外,如果您在git副本中刪除的文件中存在SVN端的更改,那麼衝突自然會發生。
對不起,我應該提到我只同步一種方式從SVN到Git ,沒有提交給SVN。看到[這裏](http://stackoverflow.com/questions/34879226/exclude-files-from-git-svn-clone) – blackbird
我的猜測是過濾器分支混亂了$ GIT_DIR/svn/* \ * /.rev_map.*(請參閱https://git-scm.com/docs/git-svn:CAVEATS/FILES)。 –
正如我所看到的,沒有什麼可以使'filter-branch'和'svn rebase'兼容。您正在重寫與遙控器有關係的歷史記錄。如果你在'filter-branch'之後刪除了遠程控制器,那將是一個不同的故事,在這種情況下,它根本就沒有關係,但就目前而言,我發現__沒有辦法使這項工作成功。 –
@Zeeker你應該把它變成一個答案,我只是意識到重寫歷史實際上改變了以前指向SVN提交的所有參考/對象 – blackbird