[英]Git Merge two repositories that are years apart with thousands of conflicts
知識庫A:我們現在正在使用舊的分支,但是基於來自B的3年代碼,最近進行了數百次提交。歷史已經不復存在-最早將知識庫上載到前幾個月Github上。
資料庫B:我們無法訪問的新的最新資料庫 。 多年的歷史。 完成后想保持其Master分支的更新。
在大約3年前的某個時候,存儲庫A是B的一個分支,然后再也沒有與B保持同步。我們想對此進行更改。 我們希望將A的所有更改作為存儲庫B。
我認為需要發生的偽代碼:
我希望能對上述偽代碼及其工作方式提供一些建議,澄清和/或翻譯。
謝謝!
從概念上講,您想要做的很簡單; 唯一復雜的因素是預期沖突的絕對數量。 要緩解這種情況,您可以做的一件事就是首先嘗試將舊的提交從B
合並到A
假設在git clone B Blocal
,您將得到以下內容:
*---......-----* A/master
*---......-----* Blocal/master
與其嘗試將B/master
A/master
全部合並為A/master
,不如合並成小塊。
git remote add Blocal
git fetch
git merge <some old commit in Blocal/master>
在解決了可能更少的沖突之后,您將擁有
M1
*--...---*-* A/master
/
*--....--*--...........................--* Blocal/master
此處的M1
(以下通常指Mi
)是一個合並提交。
然后,在Blocal/master
進行稍稍較新的提交。
M1 M2
*--...---*-*--------*-* A/master
/ /
*--....--*--......--*--.....................--* Blocal/master
繼續進行此操作,一次只Blocal/master
,直到最終運行
git merge Blocal/master
得到像
M1 M2 M3 Mn
*--...---*-*--------*-*--..--*-*--.....--*-* A/master
/ / / /
*--....--*--......--*--................--* Blocal/master
這樣,您不必一次處理所有合並沖突。 通過檢查Blocal/master
的歷史記錄,您可能能夠找到合適的合並位置,從而減少合並沖突。
完成合並后,可以將A/master
設置為跟蹤真實的B
而不是本地克隆。
git branch --track B/master
您可能會以與如何將現有Git存儲庫導入另一個存儲庫中的情況類似的導入操作結束。 。
在我看來,您似乎想像喬格(Jörg)在他的回答( https://stackoverflow.com/a/1684435/47392 )中建議的那樣,它實際上是基於Linus Torvald的“有史以來最酷的合並 ”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.