簡體   English   中英

GIT SVN:獲取重新創建的SVN分支,沒有錯誤的合並父級

[英]GIT SVN: fetching a recreated SVN branch without the wrong merge parent

我的上游svn存儲庫有以下情況:

我創建了一個svn分支,並在其上做了一些工作,這導致了一個非常復雜的歷史。 所以我再次刪除了它,保留了git提交,這讓我可以很好地清理歷史。

一旦我准備好補丁系列,我使用svn copy克隆了我的分支,然后是git svn fetch 我的想法是,然后我將清理后的歷史記錄重新修改為新的svn分支,以便我可以使用git svn dcommit輕松發布它。

但是, git svn fetch並沒有達到我的預期。 這就是我的預期(假git log --oneline --decorate --graph輸出):

* xxxxxxx (svn-branch)
* xxxxxxx (svn-parent-branch)
...
somewhere further down, unrelated to the above
* xxxxxxx (old-svn-branch-head)

但這就是我得到的:

* xxxxxxx (svn-branch)
|\
| * xxxxxxx (svn-parent-branch)
|
* xxxxxxx (old-svn-branch-head)

如您所見, git svn fetch完全忽略了svn分支被刪除的事實,將重新創建的svn提交映射到git的合並提交。 現在,我不會對此大驚小怪,如果這不重要,但不幸的是,錯誤的連接會混淆git的合並算法,在新的分支基礎提交中進行重新定位時會產生虛假的合並沖突。

所以我的問題是:我怎么能誘使git svn fetch沒有將新的分支基礎提交與錯誤的父級鏈接,或以某種方式修復我的git repo,我保留了使用git svn dcommit發布我的東西的能力? 當然,我總是可以刪除整個事情,並創建一個具有不同名稱的新svn分支,但我想知道是否存在更好的解決方案。

我遇到了類似的情況,仍然無法找到關閉此行為的方法( - --no-follow-parent關閉整個分支跟蹤,這不是我想要的)。

我最終用git replace --graft來修復歷史。 它創建一個替換提交並保持其子項不變 在替換之后(例如git replace --graft svn-branch svn-parent-branch )這就是你看到的:

* svn-branch
|
* svn-parent-branch
...
* old-svn-branch-head

您仍然可以使用gitk --all選項查看原始提交。

* svn-branch (replacement)
| 
| * svn-branch (original)
|/|
* |  svn-parent-branch
| |
| * old-svn-branch-head
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM