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 檔案,裡面記錄著子庫的在這個專案的路徑和遠端倉庫的地址
然後提交這次的改動
git commit -am "added submoudle let's go"
複製程式碼
推送到遠端倉庫
git push -u origin master(由於是第一次入庫需要設定下預設上游)
複製程式碼
然後我們修改下子庫,提交
git commit -am "修改子模組但是並不提交子模組的修改"
複製程式碼
會發現 git 提示我們有修改
如果我們嘗試推送到遠端庫,會發現並沒有在子模組的修改並未在主模組生效,因為我們沒有在子模組推送這次修改
然後我們新建一個目錄,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
複製程式碼
以上只是子模組最簡單的一些使用,想要了解的更新,請移步官方文件