Git Submodule的使用

是什么?

submodule子模塊,簡單來講就是Git倉庫中的子倉庫。

想一想是不是遇到過這樣的情況,有一個模塊是通用的,需要被使用到多個項目;或者你的項目中要使用github上的一個開源模塊。這樣的模塊要怎么在你的項目中保持同步更新甚至是提交呢?答案就是submodule。

怎么用?

1. 新增submodule

git submodule add $giturl $foldername

其中$giturl表示git倉庫地址,$foldername表示submodule的目錄名,例如:

git submodule add git://github.com/xx/A.git A

注:下面示例全部以 A 當(dāng)做submodule所在目錄

完成后,將文件變化提交即可。

2. clone有submodule的git倉庫

git clone $giturl
git submodule init
git submodule update

3. submodule A作者有更新,如何同步到我的項目?

  1. 更新submodule A

     cd A
     git pull
    
  2. 回到主git倉庫,查看狀態(tài),并提交

     cd ..
     git status
    
     //輸出結(jié)果有這樣的內(nèi)容,意思是submodule A有修改。add并提交即可
     modified:   A (new commits)
    
     git add .
     git commit -m 'update submodule'
     git push
    
  3. 你的同事或者協(xié)作的開發(fā)者,如何更新?

     git pull
     git submodule update
    

這個些操作和status的內(nèi)容一開始可能很難理解,這里要講一下關(guān)于submodule的設(shè)計理念:

  • 主git倉庫中存在.gitmodules文件,它記錄了submodule的基本信息。例如remote地址。
  • 同時在某處記錄了主git倉庫所用的submodule的commit號。
  • 主git倉庫并不同步submodule中的所有代碼,而是同步其remote地址和commit號,每個clone都是根據(jù)這兩個信息自行到remote地址獲取到該commit版本的內(nèi)容。

所以,如果你要更新submodule必須做上面的操作步驟。而你操作完成后,你的git倉庫中submodule的commit號得到更新。這樣,與你協(xié)作的開發(fā)者,就可以直接git pull得到最新的submodule commit號,git submodule update獲取submodule該commit的代碼。

4. 我是主git倉庫的開發(fā)者,同時也是submodule A的作者,如何在主git倉庫修改A并同步?

如果你理解了上面說的設(shè)計理念,那么這個操作非常簡單。

  1. 修改A目錄中的內(nèi)容

  2. 提交并同步A

     cd A
     git add .
     git commit
     git push
    
  3. 此時,你就處于3.2的狀態(tài),按照3.2操作即可。

5. 幾個submodule都想更到最新

有個簡便操作

    git submodule foreach git pull

這樣所有submodule都更到最新了,add commit即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容