git: 使用submodule進行託管
問題描述:
當一個prj.git專案裡引用了另外一個moduleA.git專案作為其一個子模組,由於該模組未完善後續可能將繼續升級,也就是需要兩套git分別管理prj.git與moduleA.git,而prj.git又使用了moduleA.git。
使用submodule進行管理
1. 新建一個專案git
2. 新建一個mouleA.git
3. 在prj.git裡新增moudleA.git。
帶有submodule倉庫的克隆方法
1. 直接clone的話是沒有submodule資訊的,只有資料夾。
這是因為,父專案的git並不會記錄submodule的檔案變動,它是按照commit id指定submodule的git header。
不過可以先對submodule初始化,然後更新,就可以clone到原module的內容。
2. 第二種方式使用遞迴clone,新增引數 --recursive。
在遠端修改submodule及本地更新submodule
1. 遠端更新submodule
2. 本地更新submodule
2.1 直接pull或者更新submodule是無效的,因為遠端prj.git並未記錄submodule有任何的改動,即遠端prj.git不知道也根本不管submodule有沒有更新,除非你在prj.git有commit記錄。
2.2 在這種情況下仍要更新submodule,就需要直接進入submodule倉庫下並切換為需要的分支進行更新。
2.3 這時prj.git 理所當然地發生了變化,根據需要提交變更記錄即可。
在本地修改submodule並push後,他處submodule更新流程
1. 本地A修改submodule並Push
1.1. 現在本地submodule新增一個新功能:c.md,然後push。
1.2 接著,提交本次prj.git的變更記錄:
2. 他處B更新submodule
2.1 pull後發現submodule發生了改動:
2.2 使用update對submodule進行更新
刪除submodule
1. git rm moduleA,即可
這樣做git的config檔案中仍有相關記錄,但是不影響使用,如果新clone的話,就不會有相關的記錄了。
如果介意可以手動將該檔案的相關行刪除。
2. 新clone後,config則無相關記錄