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則無相關記錄
git: 使用submodule進行托管