2011-11-23 45 views
3

我正在使用git,我的項目(MyProject)已經添加了一個作爲子模塊的github(SubProject)託管在其目錄結構下的公共git項目。 SubProject需要在其目錄結構下包含一個庫(SomeLibrary)。如何設置子模塊在其下面需要外部庫的git結構?

現在這很糟糕,因爲如果不是SubProject需要在它下面的SomeLibrary,這將是非常簡單的。因爲我已經將SubProject添加爲MyProject的子模塊,所以沒有什麼可做的了。但是,SomeLibrary是必需的,它不在任何git存儲庫中。因此,我將創建一個新的存儲庫並使用其版本號對其進行標記。但是將它們捆綁在一起的最佳方式是什麼?

SomeLibrary一旦位於我爲它創建的git存儲庫中,是否可以將SomeLibrary添加爲MyProject下的子模塊,或者它是否必須是SubProject的子模塊?如果它是SubProject的子模塊,那麼知道我可能需要隨時間從新的標記版本升級SubProject,最好的方法是什麼?一個示例工作流程可以真正幫助我將這個問題包圍起來,因爲我很難概念化它的樣子。 (例如,我會做任何事情之前分支SubProject,或者這是沒有必要的,這意味着我可以提取子項目下方的SomeLibrary,並提交...)

回答

0

如果您使用某種構建系統(make,maven,ant, MSBuild等),也許你可以通過將庫放置在父git倉庫中的某處並使構建系統在構建時將庫複製到子模塊來繞過整個問題。

否則,您可能必須在子模塊中創建分支,添加庫並提交,然後在父存儲庫中提交子模塊更改。每當子模塊作者產生一個更新時,你必須把它放到你的分支(因此給你更新,同時保留庫)並提交到父庫中。但是,如果要在其他計算機上克隆父git存儲庫並獲取正確的子模塊內容,則必須將此子模塊分支推送到您控制的某個位置(例如,您自己的項目的github分支)。因此,子模塊需要遙控器:原始的github項目(用於從作者處獲取更新)和github分叉(用於將作者的更新與您的庫分支合併)。

+0

不使用構建系統。因此,在第一個選項中,分支的目的是什麼 - 我不能在主分支中進行這些提交,並且仍然繼續從公共回購中獲取更新?在第二個選項中,你能描述一下我自己的項目分支是什麼意思嗎?我應該描述我的本地存儲庫將連接到我們共享但內部的存儲庫。那麼我的子模塊是否只有一個遠程共享倉庫 - 我會推動它,而共享倉庫中的子模塊將有一個遠程倉庫,這是公共倉庫,並且會從倉庫中拉出來......這是否行得通? – user779159

+0

@ user779159:當然,你可以留在主分支上;它只是感覺更正確(在我看來)創建一個新的分支,因爲你實際上並不打算最終將你的更改合併到你克隆的開源庫中。你所描述的只有內部存儲庫作爲本地遠程服務器,並將github作爲內部存儲庫的遠程服務器的方法應該可行。 –

相關問題