2011-04-27 131 views
4

我們使用GIT來管理我們的項目。Git子模塊管理策略

每個項目都有一個「核心」(比如從誰,我們將建立該項目的框架),所以每個項目都擁有至少2個遙控器分支:

  • 1庫爲核心框架。
  • 每個客戶端項目1個存儲庫。

我們也有模塊。每個模塊都有一個包含基本功能的核心,並且我們將每個客戶端的每個模塊由該基礎個人化。

  • 因此,我們必須包含在每個客戶端項目
  • 子模塊,但我無法弄清楚如何處理子模塊的personnalization一部分。

如果我想在一個只能在1個特定客戶端項目中使用的子模塊中添加一些新文件,GIT如何幫助我?

由於文件是針對主項目進行個性化處理的,所以最好的情況是提交包含在客戶端項目分支中的子模塊內的一些文件,但看起來我不能像每個子模塊都是獨立的。

Ps .:我們使用SmartGit。

回答

1

這是一種情況,如果你讓你的倉庫中修改到其他 項目,你可以使用git子樹(合併)

,他們可能 想從你的項目進行合併。這 可能使用子樹 - 它可以 上移樹中的路徑和 然後他們可以只合並相關的 部分樹。

http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html

子樹合併的想法是,你 有兩個項目,和 項目之一映射到 另一個反之亦然的子目錄。當你 指定一個子樹合併,Git是智能 足以找出一個是另一個的 子樹併合並 適當 - 這是相當了不起的。

http://progit.org/book/ch6-7.html

不過,我想你想使用子模塊,而不是遠離它移動。

+0

我對子模塊的唯一興趣是因爲如果我們修復了核心一個模塊,在每個項目中應用這個改變真的很容易。 – FMaz008 2011-04-27 14:33:06

0

我不能像每個子模塊是獨立的。

雖然這是事實一個子模塊是「獨立的」,因爲它有自己的一套提交和分支作爲一個單獨的存儲庫,您仍然可以定義一個客戶項目分支上說,子模塊。

該分支將在您的主客戶端項目回購以及核心子模塊中定義,以便隔離特定於兩個回購中完成的客戶項目的更改。
當您推回在覈心子模塊中完成的更改時,可以將它們推送到客戶機項目分支中,該分支的名稱與客戶機父級回購中使用的客戶機分支的名稱相匹配。

簡而言之,命名約定可能會幫助您隔離由許多客戶端項目回購使用和共享的核心子模塊中所做的小型特定更改。

+0

但是分支必須是遠程才能在所有開發人員之間共享。那麼這是否意味着我必須爲每個客戶端的每個子模塊版本創建一個存儲庫?所以如果我使用10個子模塊,我將不得不創建11個存儲庫來處理1個項目? – FMaz008 2011-04-27 14:25:12

+0

@ FMaz008:「每個子模塊1個存儲庫」:子模塊*已經是*回購。如果您在項目客戶端中使用了10個子模塊,那麼您在'.submodules'文件中引用它們。無論是在母公司還是在某個子模塊中創建的每個分支,都會在推送到其各自的上游回購庫後共享。 – VonC 2011-04-27 14:39:38

+0

是的,我明白這一點。因此,確認我將不得不創建儘可能多的存儲庫,因爲我將爲每個項目創建子模塊。 – FMaz008 2011-04-27 15:16:36