使用場景
例如,在項目Game中有一個子目錄AI。Game和AI分别是一個獨立的git項目,可以分開維護。為了避免直接複制粘貼代碼,我們希望Game中的AI子目錄與AI的git項目關聯,有3層意思:
- AI子目錄使用AI的git項目來填充,内容保持一緻。
- 當AI的git項目代碼有更新,可以拉取更新到Game項目的AI子目錄來。
- 反過來,當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
- speackerdeck
- atlassian
- pro git