git庫遷移出現fatal: refusing to merge unrelated histories

 

背景:

我們原來的代碼庫是這樣的,[email protected]:a.work.git(簡稱a倉庫)

代碼總庫work下分爲兩個文件夾,develop作爲開發和測試庫,release作爲生產庫。各自文件夾內區分不同項目,比如有三個項目分別aPro、bPro、cPro,目錄結構如下:

- work

    -develop

        -aPro

        -bPro

        -cPro

    -release

        -aPro

        -bPro

        -cPro

需求:

現需要將a庫中的aPro遷移至[email protected]:b.work.git(簡稱b倉庫)

如果直接拷貝一份代碼推送到b倉庫,那麼b倉庫只有這一次推送的記錄,之前的commit都沒有保留,這肯定是我們不希望的。那麼如何保留commit的進行git庫遷移呢

操作:

使用git subtree split -P path/folder -b branchName

直接在要拆分的分支上執行該命令,會形成一個新的分支

  • 在a倉庫的master分支新創建一個遷移aPro的分支

git checkout -b feature/aPro
  • 在這個新的分支執行git subtree split -P path/folder -b branchName
git subtree split -P develop/aPro -b feature/dev_aPro
  • 此時我們得到了feature/dev_aPro分支
  • 關聯b倉庫
git remote add newOrigin [email protected]:b.work.git
  • 查看是否關聯成功,此時可以看到共有四條origin  兩個a庫的 兩個b庫的
git remote -v
  • 將 feature/dev_aPro推送到新庫
git push newOrigin feature/dev_aPro:feature/dev_aPro

此時已經將aPro項目推送至b倉庫了,並且保留了原來的commit

原a庫的代碼還有遺留或開發中:

假如時間順序是這樣的,a庫中有一個分支正在改造aPro項目,而我開始遷移庫的時候是從master新創建的分支做的遷移,這就導致b倉庫中沒有這個正在開發的分支的代碼。

那麼等到a庫中進行中的分支執行完成,需要把落後的這一次提交也遷移到b倉庫,做法和上邊是一樣的,還是在master新創建一個分支,將這個分支推送到b倉庫的指定分支,此時這個新的分支去pull之前的那個分支,

會出現refusing to merge unrelated histories的錯誤。

此時需要使用

git pull origin master --allow-unrelated-histories

來強制將兩個分支指向同一個源

執行完之後再去pull ,就可以處理衝突  然後提交代碼了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章