git 跨倉庫合併

1、前言

本文檔爲跨git倉庫合併代碼並保留commit歷史記錄提供理論基礎和指導。

本文檔讀者要具備對git倉庫,本地倉庫、遠程倉庫的深刻認識。

2、理論基礎

  1. git是一個完整的本地版本管理系統。
  2. git本地倉庫和遠程倉庫沒有區別
  3. 跨倉庫合併代碼,本質是將A倉庫作爲B倉庫的遠程倉庫,並將AB倉庫關聯起來,即可作爲一個倉庫進行操作。

3、前提條件

準備兩個倉庫,本地初始化兩個倉庫即可演示。

倉庫A:  repo_A

倉庫B:  repo_B

初始化兩個倉庫,每個倉庫提交一個文件,並多commit幾次,形成提交記錄。

本地演示目錄: /d/workspace/acrossRepos

倉庫目錄

/d/workspace/acrossRepos/repo_A/.git

/d/workspace/acrossRepos/repo_B/.git

 

倉庫repo_A創建repo_A.txt文件,提交2次。

 

倉庫repo_B創建repo_B.txt文件,提交2次。

4、合併目標

將倉庫repo_B的文件及提交記錄合併到倉庫repo_A

即在倉庫repo_A中,可以看到repo_B的文件,使用git log可以看到repo_B的提交記錄

5、合併流程

第一步,repo_B作爲repo_A的遠程倉庫,即repo_A作爲本地倉庫。repo_B作爲遠程倉庫。

repo_B作爲遠程倉庫添加到repo_A中,並給repo_B起個別名repo_BB,遠程分支名默認爲origin

第二步:fetch遠程倉庫repo_BB到本地

第三步:創建本地分支並關聯遠程分支,repo_B倉庫只有master分支,故使用master分支演示。

本地創建分支名爲:repo_B_master_branch,該分支內容與repo_Bmaster分支相同。

第四步:切換到repo_Amaster分支,準備從repo_A倉庫的repo_B_master_branch分支合併repo_B倉庫的master分支的代碼和歷史記錄。

第五步:從repo_B_master_branch 分支merge cherry-pickrepo_A倉庫master分支。merge的時候會報錯:

意思是兩個倉庫的歷史記錄沒有任何關聯,拒絕合併。加如下參數允許合併:

--allow-unrelated-histories

合併後,使用git log查看repo_A倉庫的歷史記錄

6、Q&A

如果涉及到遠程倉庫,僅僅多了合併前把遠程倉庫clone/pull到本地,合併後把本地倉庫push到遠程而已。

 

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