1. 程式人生 > >匯入另一個 Git庫到現有的Git庫並保留提交記錄

匯入另一個 Git庫到現有的Git庫並保留提交記錄

提取出的主要步驟如下:

1 切換到要合併到的倉庫

2 git remote add 倉庫名 被合併倉庫路徑

3 git fetch --all

4 git merge 倉庫名/被合併倉庫想合併的分支

問題描述:

我在本地有兩個Git庫專案(D1=PC專案  包含通用專案 ,D2=移動專案  也 包含通用專案 這兩個專案在同一目錄下 ), 因為這兩個專案使用的通用專案是一樣的如資料庫訪問等

只有顯示層(view)不一樣而已,因為在之前沒有很好的規劃而導致出現現在的問題,即如果D1裡更改了通用專案的檔案

那麼D2需要先將D1通用專案的更改先合併過來然後再處理D2專案(防止出現差異導致出現問題),反之也是一樣,所以如果通用專案檔案經常更新時,我就需要浪費大量的時間在合併這兩個Git倉庫上

所以要現在要將把這兩個庫專案合併到一個庫裡以分支的方式(D1,D2)進行管理(開發PC專案時切換到D1分支,開發移動專案時切換到D2分支)

然後通用專案分別從D1,D2分支遷移出來到新分支Common 單獨 進行管理,然後D1和D2刪除通用專案檔案

現在我如何將一個庫合併到另一個庫呢(提交記錄必須不能丟失)?經過幾天的測試終於解決

需要解決的問題:

      把D2倉庫的所有內容和提交記錄合併到D1 倉庫中中,然後以分支的方式來管理D2專案

    如何從D2倉庫和D1倉庫遷移出通用專案檔案並保留提交記錄以後會單獨處理

目前的目錄結構

F:

 |--   D1

      |--  D1.txt

         |-- .git

 |--   D2

  |--  D2.txt          |-- .git

我期望的 目錄結構

F:  |--   D1

      |--  D1.txt

         |-- .git

|--   D2  合併D2倉庫檔案和提交記錄到D1,以分支的方式管理

|--  D2.txt

解決方案:

     先看下D1和D2的提交記錄

D2倉庫的提交記錄

D1倉庫的提交記錄

使用remote加fetch的方法將D2的檔案和提交合併到D1

  1. 切換到D1 Git倉庫
  2. 使用“git remote add d2 ../d2”將D2倉庫中所有資訊以遠端倉庫的方式新增到D1的新建d2分支裡
  3. 使用“git fetch --all”獲取d2遠端倉庫的所有資訊
  4. 切換到D1倉庫的主分支master
  5. 合併已新增的遠端分支d2到你需要的分支
  6. 處理合並後的分支,如刪除遠端分支不需要的分支,整理或精簡合併後的提交歷史,刪除D2專案檔案等(GIT會將兩個倉庫的提交按時間的方式來進行合併)
      使用pull直接進行合併
  1.  使用“git pull  遠端分支地址”直接合並,應該在新的分支裡進行該操作,然後再進行合
  2. 處理合並後的分支,如刪除遠端分支不需要的分支,整理或精簡合併後的提交歷史,刪除D2專案檔案等(GIT會將兩個倉庫的提交按時間的方式來進行合併)

以上兩種方式都可以將一個Git倉庫的檔案和提交合併到另一個Git倉庫(Pull更簡單點)

因為對git並不是太瞭解所以並不太清楚這個之間的關係和區別, 有知道的大神或有其他解決方案請告知不勝感激

stackoverflow上有人說可以使用“git-fast-export”來實現,但搞了一二天愣是沒有實現

因為之前測試時沒有截圖所以也忘記錯誤是什麼了,現在也懶的再測試一遍

參考: