2013-07-26 39 views
4

在一個項目中,我必須組織項目的多個部分。用php編寫的web應用程序,用nodejs編寫的api服務器以及android和ios應用程序。將它們分成多個回購區是不錯的主意?或單獨的文件夾在一個單一的git回購?如何在git repo中組織項目的不同部分?

回答

2

如果您打算重新使用這些單獨的「項目」,您應該使用git子模塊。但是,如果你不這樣做,我會簡單地在不同的文件夾中將它們分開在一個獨特的git下。

git子模塊非常適合可以「克隆」並在任何其他(更大)項目中保持最新狀態的項目。

請注意,它在處理子模塊時會添加一些複雜層。

3

如果單個模塊相當獨立,您可以使用git submodule來混合這兩種方法。你最終會得到一個單獨的文件夾/ repo,其中每個子項目都有一個文件夾。每個子項目都是獨立的存儲庫,可以這樣使用,但您可以從根存儲庫跟蹤每個項目的版本,並向子模塊發出「聯合」命令,如

git submodule update 

或 「遞歸」 命令,在

git submodule foreach make 

找到documentation和某種tutorial在線。

這是建立包含幾個子模塊的存儲庫(NCS,...,test_network)

git init 
git submodule add ssh://.../ncs 
... 
git submodule add ssh://.../test_network 
vim Makefile #write the Makefile for the whole project 
git add Makefile 
git commit -i -m "Makefile added" 
git submodule foreach autoreconf -i 
git submodule foreach ./configure 
make test 
0

我會保持這些作爲單獨的項目的例子。如果你需要結合git倉庫,你總是可以使用git submodules

+0

有一些嚴重的[缺點](http://stackoverflow.com/questions/17875040/how-to-organize-different-parts-of-project-in-git-repo/32237710#32237710)到「每個零件的一次回購」方法,我不確定這些優勢是否值得。 –

0

我試過一個項目,包括前端的網頁應用程序,後端一個,一個Chrome擴展,一個網站和一些共享庫的「一個回購每件」方法。這主要是由於這些庫是在GitHub上開源的,而其餘的代碼是專有的。

雖然這顯然對於開源庫偉大的工作,它變成了創造私人回購幾個問題:

  1. 更新較慢。 WebStorm(可能還​​有其他IDE)必須檢查這個額外的回購(大約10回購大約需要30秒來檢查什麼時候同步VCS,並且沒有更新)。我最終創建了在當前項目(前端/後端/ etc)依賴的每個目錄中創建git pull的shell腳本
  2. 恢復到相互依賴的項目部分之間的給定提交(例如,之前API更改)並不那麼容易 - 您需要檢查不同repos中的不同提交,或者始終使用標籤。查看提交時間戳是最容易的。

我發現此模式的唯一不錯的效果:即需要不同的權限

  • 回購,例如一個開放源碼組件與專有回購協議顯然應該是分開的。然而,一個私人回購可以持有私人項目的多個部分(例如,前端和後端可以是同一個倉庫中的目錄)
  • 在GitHub上有獨立的問題跟蹤器意味着您不必通過「In ...,發生這種情況」來啓動每個問題。