Git為了解決這類問題,提供了submodules的概念,讓repository具有類似參考的功能。以上面的例子來看,我可以將模心模組切割出來放到新的repository R,接著在原本系統所使用的repository中建立submodules並將參考位址指向R。往後如果有新的客製化專案,也是依照一樣的方式,建立新的repository並設定submodules位址。如此開發人員只要維護一份核心模組即可,另外還有好處就是可以對核心模組的repository做權限控管。
這裡並不打算介紹以Git指令來建立submodules,而是使用Git Extensions來說明,因為Git Extensions是目前我的團隊中所使用的Git圖形化工具。
在說明前,我已先在GitHub上準備好兩個repository,分別是SubmodulesDemo-Main及SubmodulesDemo-Sub,且各放了一個文字檔。
接下來在本機的SubmodulesDemo-Main中,右鍵撰擇GitExt Browse
點選Repository-> Submodules
點選Add submodule,Path to submodule輸入SubmodulesDemo-Sub的位址https://github.com/petekcchen/SubmodulesDemo-Sub.git後點選Add完成設定。
回到SubmodulesDemo-Main資料夾,可以發現多了.gitmodules檔案和SubmodulesDemo-Sub資料夾,且資料已被pull到本機。
最後右鍵選擇GitExt Commit,將submodules設定push回SubmodulesDemo-Main repository,在GitHub上即能看到對SubmodulesDemo-Sub repository的參考。
submodules建立完成後,有一點要注意的是,當SubmodulesDemo-Sub repository有更新時,需要到本機的SubmodulesDemo-Sub資料夾做pull才能取到最新的commit,在SubmodulesDemo-Main中做pull是無法同時取得SubmodulesDemo-Main repository和SubmodulesDemo-Sub repository內的資料。在取得SubmodulesDemo-Sub repository最新的commit後,也記得要再push回SubmodulesDemo-Main repository以便更新最新的submodules參考。