Git 子模組

笨小孩發表於2019-03-02

Submodule解決了什麼問題

當你的專案裡依賴與一個第三方模組,或者一個子專案,而你需要保持這個模組的更新,確保使用這個子模組的所有專案都能同步到,如果拷貝的話就達不到這個目的,總之一句話就是在一個庫裡可以包含多個子庫,並且主庫和子庫是隔離的,互不影響.

如何使用

我們現在新建一個庫叫 parent

git clone git@github.com:hurryking/parent.git
複製程式碼

然後在 parent 下新建一個目錄 children

cd parent
mkdir children
複製程式碼

進入 children 執行

cd children
git submodule add git@github.com:hurryking/let-s-go.git
複製程式碼

然後在 parent 下就能看到剛才加的子庫,還有一個 .gitmodules 檔案,裡面記錄著子庫的在這個專案的路徑和遠端倉庫的地址

gitsubmodule01

然後提交這次的改動

git commit -am "added submoudle let's go"
複製程式碼

推送到遠端倉庫

git push -u origin master(由於是第一次入庫需要設定下預設上游)
複製程式碼

然後我們修改下子庫,提交

git commit -am "修改子模組但是並不提交子模組的修改"
複製程式碼

會發現 git 提示我們有修改

gitsubmodule02

如果我們嘗試推送到遠端庫,會發現並沒有在子模組的修改並未在主模組生效,因為我們沒有在子模組推送這次修改

然後我們新建一個目錄,clone 下我們剛才的 parent

git clone git@github.com:hurryking/parent.git
複製程式碼

會發現 clone 下來的專案中子庫中並沒有東西,git 並沒有自動替我們拉取子庫的程式碼

我們需要執行下面的命令初始化子庫

git submodule init
複製程式碼

拉取子庫最新程式碼

git submodule update
複製程式碼

或者有個更簡單的辦法在 clone 帶recursive引數,會自動拉取所有子模組的程式碼

git clone --recursive git@github.com:hurryking/parent.git
複製程式碼

以上只是子模組最簡單的一些使用,想要了解的更新,請移步官方文件

相關文章