April 28, 2014

使用Git Extensions建立submodules

目前開發的某個系統A其核心模組未來需要被不同的客製化專案所共用,A在GitHub上使用了一個repository。但因為上述需求,未來的客製化專案一定會使用到A的核心模組。最簡單的方式就是開一個repository給新專案,再把核心模組也複製一份過去使用。但如此一來就會有兩份核心模組需要維護,未來若有數十個客製化專案,維護成本不小且容易出錯。

Git為了解決這類問題,提供了submodules的概念,讓repository具有類似參考的功能。以上面的例子來看,我可以將模心模組切割出來放到新的repository R,接著在原本系統所使用的repository中建立submodules並將參考位址指向R。往後如果有新的客製化專案,也是依照一樣的方式,建立新的repository並設定submodules位址。如此開發人員只要維護一份核心模組即可,另外還有好處就是可以對核心模組的repository做權限控管。

這裡並不打算介紹以Git指令來建立submodules,而是使用Git Extensions來說明,因為Git Extensions是目前我的團隊中所使用的Git圖形化工具。

在說明前,我已先在GitHub上準備好兩個repository,分別是SubmodulesDemo-MainSubmodulesDemo-Sub,且各放了一個文字檔。



接下來在本機的SubmodulesDemo-Main中,右鍵撰擇GitExt Browse


點選Repository-> Submodules


點選Add submodulePath 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參考。

No comments: