首頁 > 軟體

git-github 子模組倉庫更新(git submodule)及git中submodule子模組的新增、使用和刪除操作

2023-03-29 06:01:48

一、git submodule背景

專案中經常使用別人維護的模組,在git中使用子模組的功能能夠大大提高開發效率。
使用子模組後,不必負責子模組的維護,只需要在必要的時候同步更新子模組即可。

1. git將submodule有關的資訊在哪?

git將submodule有關的資訊儲存在兩個地方:

  • .gitmodules在倉庫中,有版本控制,修改之後會同步到其他倉庫,使用submodule相關命令的時候會自動更新
  • .git/config在本地,需要手動更新,或者執行git submodule sync將新的設定從.gitmodules拷貝到.git/config
  • git submodule sync會將submodule遠端的 url 設定設定到.gitmodules,並且只會影響.git/config已經有 url 的條目,指定–recursive,將會遞迴更新註冊的submodule

2. 子模組的新增

新增子模組非常簡單,命令如下:

git submodule add

其中,url為子模組的路徑,path為該子模組儲存的目錄路徑。

執行成功後,git status會看到專案中修改了.gitmodules,並增加了一個新檔案(為剛剛新增的路徑)

git diff --cached檢視修改內容可以看到增加了子模組,並且新檔案下為子模組的提交hash摘要

git commit提交即完成子模組的新增

3. 子模組倉庫更新

github 子模組多倉庫程式碼更新。

git submodule sync
git submodule update --init

當使用git clone下來的工程中帶有submodule時,初始的時候,submodule的內容並不會自動下載下來的,此時,只需執行如下命令:
git submodule init
git submodule update

或:
git submodule update --init --recursive

執行後,子模組目錄下就有了原始碼,再執行相應的makefile即可。

子模組的更新

子模組的維護者提交了更新後,使用子模組的專案必須手動更新才能包含最新的提交。

在專案中,進入到子模組目錄下,執行 git pull更新,檢視git log檢視相應提交。

完成後返回到專案目錄,可以看到子模組有待提交的更新,使用git add,提交即可。

4. 刪除子模組

有時子模組的專案維護地址發生了變化,或者需要替換子模組,就需要刪除原有的子模組。

刪除子模組較複雜,步驟如下:

rm -rf 子模組目錄 刪除子模組目錄及原始碼
vi .gitmodules 刪除專案目錄下.gitmodules檔案中子模組相關條目
vi .git/config 刪除設定項中子模組相關條目
rm .git/module/* 刪除模組下的子模組目錄,每個子模組對應一個目錄,注意只刪除對應的子模組目錄即可

執行:git submodule status
linux下執行:
git ls-files --stage | grep 160000 
windows下執行:
git ls-files --stage | findstr 160000

執行完成後,再執行新增子模組命令即可,如果仍然報錯,執行如下:
git rm --cached 子模組名稱

完成刪除後,提交到倉庫即可。

過程中問題

1.fatal: Please stage your changes to .gitmodules or stash them to proceed
D:GoWorkssrcmylotus>git rm --cached extern/filecoin-ffi
fatal: Please stage your changes to .gitmodules or stash them to proceed

如果提示Please stage your changes to .gitmodules or stash them to proceed直接刪掉.gitmodules檔案即可
$ rm ./gitmodules

參考文獻

git中submodule子模組的新增、使用和刪除
參考URL: https://blog.csdn.net/guotianqing/article/details/82391665

到此這篇關於git-github 子模組倉庫更新(git submodule)/git中submodule子模組的新增、使用和刪除的文章就介紹到這了,更多相關git github 子模組使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com