天天看點

git subtree用法

使用場景

例如,在項目Game中有一個子目錄AI。Game和AI分别是一個獨立的git項目,可以分開維護。為了避免直接複制粘貼代碼,我們希望Game中的AI子目錄與AI的git項目關聯,有3層意思:

  1. AI子目錄使用AI的git項目來填充,内容保持一緻。
  2. 當AI的git項目代碼有更新,可以拉取更新到Game項目的AI子目錄來。
  3. 反過來,當Game項目的AI子目錄有變更,還可以推送這些變更到AI的git項目。

用git subtree可以輕松滿足上面的需求。

git subtree用法

針對第一段的3條需求,我分别說明具體的指令。

1. 第一次添加子目錄,建立與git項目的關聯

建立關聯總共有2條指令。

文法:​

​git remote add -f <子倉庫名> <子倉庫位址>​

解釋:其中-f意思是在添加遠端倉庫之後,立即執行fetch。

文法:​

​git subtree add --prefix=<子目錄名> <子倉庫名> <分支> --squash​

解釋:–squash意思是把subtree的改動合并成一次commit,這樣就不用拉取子項目完整的曆史記錄。–prefix之後的=等号也可以用空格。

示例

$git remote add -f ai https://github.com/aoxu/ai.git  
$git subtree add --prefix=ai ai master --squash      

2. 從遠端倉庫更新子目錄

更新子目錄有2條指令。

文法:​

​git fetch <遠端倉庫名> <分支>​

文法:​

​git subtree pull --prefix=<子目錄名> <遠端分支> <分支> --squash​

示例

$git fetch ai master  
$git subtree pull --prefix=ai ai --squash      

3. 從子目錄push到遠端倉庫(确認你有寫權限)

推送子目錄的變更有1條指令。

文法:​

​git subtree push --prefix=<子目錄名> <遠端分支名> 分支​

$git subtree push --prefix=ai ai master      
  1. ​​speackerdeck​​
  2. ​​atlassian​​
  3. ​​pro git​​