簡體   English   中英

Git合並了兩個相距數年的存儲庫,其中有數千個沖突

[英]Git Merge two repositories that are years apart with thousands of conflicts

知識庫A:我們現在正在使用舊的分支,但是基於來自B的3年代碼,最近進行了數百次提交。歷史已經不復存在-最早將知識庫上載到前幾個月Github上。

資料庫B:我們無法訪問的新的最新資料庫 多年的歷史。 完成后想保持其Master分支的更新。

在大約3年前的某個時候,存儲庫A是B的一個分支,然后再也沒有與B保持同步。我們想對此進行更改。 我們希望將A的所有更改作為存儲庫B。

我認為需要發生的偽代碼:

  1. 將B克隆到具有[Master]分支的新項目中。
  2. 制作一個包含所有A的[舊]分支。
  3. 將[舊]分支合並到[主]分支中,並解決數千個沖突(我們如何保留A的歷史記錄?)
  4. 為Repo 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.

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