2010-02-24 114 views
10

我有以下項目設置:重用一個Git倉庫的部分

  • Solution A
    • Project 1(輕量級組件)
    • Project 2(包含很多文件,並取決於Project 1

Solution A是一個單獨的git存儲庫。然後我創建了另一個解決方案,並發現我可以重新使用並更新Project 1的功能。所以,我的第二個解決方案可能會是這樣的:

  • Solution B
    • Project 1(必須是共享的!)
    • Project 3(取決於Project 1)。

現在我想Project 1成爲一個共享的組件。也就是說,每次我從任一解決方案(AB)更改Project 1的源代碼時,我都需要另一個相應地進行更新。

也許這有點事子模塊功能git。但是,我能夠使用它的唯一方法是將整個Solution A指定爲Solution B的子模塊。這並不是我想要的理想,因爲Solution A的巨大尺寸。我只需要它的一小部分是一個子模塊。

我知道這是可能的svn和完全按照我所描述的:您在svn:externals屬性中的外部存儲庫中指定一個目錄。

有關於此的任何提示?或者,也許,我錯過了什麼?

回答

7

這肯定是關係到子模塊(見nature of submodules

在你的情況下,理想的解決方案是從SolutionA提取Project1 Git repo:
請參閱How to extract a git subdirectory and make a submodule out of it?

但是,這涉及到重寫SolutionA歷史記錄,如果您已經發布了它,並且某些人正在從中解脫出來,那麼這是一個問題。

使用filter-branch進行提取過程。

要重寫庫看起來好像Project1/曾經是它的項目的根,並放棄所有其他的歷史:

git filter-branch --subdirectory-filter Project1 -- --all 

因此,你可以,例如,把一個庫子目錄成自己的存儲庫。請注意,--filter-branch選項與修訂選項分開,並將--all重寫爲所有分支和標記。

然後在SolutionB聲明Project1作爲子模塊:

cd SolutionB 
git submodule add /path/to/Project1 Project1 

注意:這裏如果你計劃發佈SolutionB不要使用本地URL!

git commit -m "Add submodules Project1" 
0

拆分項目1出自己的資源庫,並使其解決方案A和方案B兩者的子模塊