2011-03-25 87 views
21

我正在使用GIT來管理內容管理系統(CMS)項目。 CMS可以有多個插件(模塊)。Git子模塊或子存儲庫或遠程?

所以基本上,我想有3種類型的存儲庫:

  • 核心CMS開發(每個新項目是去年穩定&未配置的版本結帳)每個模塊/插件
  • 1庫。 (每個新項目將簽出他們想要實現模塊的最新穩定版本)每個項目
  • 1庫(每個客戶端將是表示從核心CMS和模塊的個性化信息庫)

對於類型1 & 2,我想這是簡單的基本知識庫。 但是,當它來到客戶項目,我會感到困惑:

  • 首先我會克隆CMS,然後再在/模塊/文件夾,然後再克隆所有需要的模塊?這將在存儲庫中創建一個存儲庫!第一個回購會嘗試記錄每個模塊的.git /文件夾嗎?
  • 我無法使用子模塊,因爲每個客戶端都需要對其模塊進行個性化設置。
  • 如果我修改模塊的核心組件(而不是個性化,只是一個錯誤修復),我可以將單個文件推送到原始模塊存儲庫嗎?
  • (不說話的模塊單元測試是將各地分散的)

所以,問題是: 我應該如何組織庫(S)/文件/文件夾,以提高效率?

回答

12

你所描述的佈局將很好的與git子模塊配合使用。我會輕輕推薦閱讀docs並嘗試幾個tutorials。您的計劃引入的主要區別是每個客戶端存儲庫和客戶端插件存儲庫都有兩個遠程控制器,而不是一個。而且,當你要開始一個新的客戶端項目,您將需要

  1. 叉主線CMS
  2. 叉都將被修改
  3. 克隆分叉從(1),更新CMS的插件其子模塊的指向從(2)
  4. 初始化新的遙控器/更新子模塊
  5. (可選)添加主線CMS網址爲您的客戶端分叉CMS遠程
  6. (可選)添加主線插件的網址作爲你的cli中的遙控器ent的分叉插件

一個更好的選擇可能是使用相同的存儲庫,並簡單地爲每個客戶端分支。我就是這麼做的。

+0

嗯,我讀過了git help submodule,他們說:「它們不能與遙控器相混淆,遙控器主要用於同一項目的分支機構;子模塊用於您想要參與的不同項目的源代碼樹,而兩個項目的歷史仍保持完全獨立,並且不能從主項目內修改子模塊的內容。「 ...在我的情況下,我想要修改客戶端項目中的子模塊,以防需要個性化插件。現在你告訴我,我們可以修改子模塊? – FMaz008 2011-03-27 11:39:58

+1

是的。修改客戶端的插件代碼,提交併將更改推送到(2),然後轉到客戶端的CMS代碼,並提交併將更改推送到插件(更新SHA哈希)爲(1)。 – 2011-03-27 23:19:11

+0

好吧,聽起來像一個很好的答案,但我仍然有一個關於文件夾組織/結構的補充問題:http://stackoverflow.com/questions/5461617/using-git-and-submodule-whats-a-good-folder -結構體 – FMaz008 2011-03-28 15:50:31

4

短的更新/關於以前的答案的其他信息:如果你不喜歡git submodules方法或認爲這是太難以理解,你可以嘗試

  • git subtrees(檢查this article on medium
  • git subrepo (更容易替代子模塊,在Github
  • 或者甚至在子模塊中更深入地用「掌握Git子模塊」在上medium.com

不要忘記檢查,如果你可以使用另一個depency管理器(比如RubyGems的Ruby的,作曲家PHP ...),而不是子模塊,它會更容易使用和維護。

相關問題