git submodule 解析


submodule 原理
 

submodule 是一個版本庫,跟你的主版本庫實際上是一個東西。

 
將 submodule add 到你的主版本庫,是將一個子版本庫的一條提交,也就是head,被主版本庫紀錄了下來。 主版本庫使用這個版本庫head之前的代碼。
 
git 是一個文件系統,子版本庫的remote地址和這個版本庫的head,這些紀錄究竟保存在哪里呢。
 
我們來具體操作一下
 
我在自己項目中添加了一個臨時分支,_my_br, 在這個分支下做下實驗
 
嘗試將sqlite作為子版本加入到主版本庫中
看一下git status
多了一個.gitmodules, 這里面包括sqlite版本庫的.git文件路徑,也就是主版本庫對子版本庫的索引
url 是子版本庫的地址,path在主版本庫中的目錄地址,子版本庫head,就存在這個目錄里,進去看以下
f69b89a078e2200fee54a9f897e6957bd627d8b7 就是引用的sqlite的head提交,可以驗證以下
一模一樣。
 
add submodule 就在git的文件目錄里做了以上的事情。
 
這是submodule的創建
 
如果submodule有了新的提交項,如何更新到主版本庫中的索引呢
 
在sqlite3中提交一項
head為4a62cb12e3e806a6a7cf016b60422182a5f93df1
回到主版本庫
把它交上去
這時候看以下主版本庫中的head
也已經更新了
 
后面就主版本庫子版本庫就各自push上去就可以了
 
submodule的更新,就一句基本滿足需求 git submodule update --init --recursive, 所有submodule都會被更新,這過程中會用到上面提到的url和head索引
 
submodule 刪除, 這個需要手動刪除了
.gitmodules .git/config 這兩個文件中刪除sqlite對應部分, .git/modules/ 目錄中刪除 sqlite目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM