2012-01-20 14 views
2

目前我們使用SVN(是的,我知道這很可惜:)),我們正在檢查移動Git或Hg的可能性。 目前,我們有一個結構回購SVN這樣的:複雜項目結構的Git/Hg知識庫

Platform 1- 
      . Country 1 
        . Customer A 
           . Project Z 
           . Project Y 
        . Customer B 
           . Project X 
      . Country 2 
        . Customer C 
           . Project W 
Platform 2 
      . Country 1 

我們只有2個頂級「平臺」,但國家,客戶,尤其是項目的數量是相當高的(我肯定的項目數量> 100)。 這個結構對我們很方便,因爲它很容易找到必要的項目(開發人員知道平臺,國家和客戶)。而且通常開發者可以在1周內多次切換項目,這個組織非常重要。

基本用例:

  1. 工程師接收項目介紹(經常有人已經制作的項目)
  2. 工程師在他的硬盤全部SVN回購副本。他會前往必要的國家/地區,然後SVN更新用於客戶文件夾(如果他沒有項目)或Project文件夾(如果他之前已經簽出)。
  3. 用戶在該項目上工作,並通過提交整個Project文件夾進行提交。

有些人只是瀏覽TortoiseSVN Repo瀏覽器,找到必要的項目並檢查出來。

所以現在我們需要一些簡單的東西,但使用Git/Hg。正如我在Git中所瞭解的那樣,很常見的模式 - 1個Repo/1項目。所以問題是:

  1. 有什麼辦法可以將Git/Hg中的回購分類進行分類?
  2. 有沒有辦法瀏覽通過圖形用戶界面(贏)回收和拉必要的?
  3. 您有任何優惠如何使用Git/Hg組織我們的回購?

我創建了BitBucket Git repo來玩它,但現在還不理解我如何組織我們的項目。

只需要注意 - 對於我們來說分支機構並不是很常見的情況,因爲項目在開發方面相當小。

回答

4

正如我在Git中所瞭解的那樣,很常見的模式 - 1個Repo/1項目。

這不僅僅是很常見,它在使用分佈式版本控制系統(如Mercurial或Git)時實際上是強制性的。原因是兩個系統都不支持narrow clones,也就是說,您只能在更大的存儲庫中下載屬於某個子目錄的歷史記錄的克隆。因此,您需要檢出所有內容才能獲取存儲庫的一小部分。

因此,創建一個存儲庫每個項目。您可以通過像今天一樣創建文件夾結構來將項目組織成組。該文件夾結構不會在任何存儲庫中 - 這只是將相關存儲庫分組的一種方式。

諸如Kallithea之類的工具也可讓您將組織存儲庫分層分組。這將讓您的用戶以方便的方式瀏覽存儲庫。

所以,問題是:

  1. 有沒有辦法歸類在Git中/ HG回購?
  2. 有沒有辦法瀏覽通過圖形用戶界面(贏)回收和拉必要的?
  3. 您有任何優惠如何使用Git/Hg組織我們的回購?

總結上面的答案:是的,你可以組織倉庫。您可以通過將它們放入目錄結構來在文件系統級別執行此操作,並且可以使用合適的存儲庫管理器在HTTP級別上執行此操作。

如何瀏覽存儲庫以找到合適的存儲庫取決於組織。推薦共享存儲庫的方式是HTTP,然後「打開存儲庫」對話框不會讓您在文件夾中瀏覽 - 因爲文件夾僅存在於由Kallithea提供的URL中。因此,您的工程師通常會在瀏覽器中瀏覽存儲庫結構,然後將正確的URL複製粘貼到TortoiseHg

當他們從服務器克隆時,工程師應該將本地克隆放入一個與服務器上的克隆相匹配的層次結構。該層次結構將在其本地磁盤上的目錄中完成。然後,他們當然可以像Windows平臺一樣使用Windows資源管理器瀏覽這個層級。

+0

感謝您的詳細解答。我檢查過RhodeCode(和其他一些回購管理器),看起來它們都只支持1級組。在我的情況下,我真的至少需要2個級別...(我的例子中的平臺和國家),但3個級別是可取的。你有什麼想法回購經理可以做到這一點? – OgreSwamp

+1

我很抱歉,剛發現RhodeCode支持它。將嘗試鏈接它與Git服務器...謝謝! – OgreSwamp

+0

@OgreSwamp:如果你還在使用RhodeCode,那麼我建議切換到Kallithea。 RhodeCode不再是開放源代碼,而是具有複雜/不連貫的許可模式,其中只有部分代碼是免費的。卡利西亞簡直就是GPLv3。 –

2

最簡單的方法是,你的項目的簡單使用一個git倉庫,就像你與顛覆做。

優點:就像你一樣。缺點:更新任何部分更新存儲庫的所有部分;沒有像SVN那樣的「只有這裏」更新。

通常,如果平臺,國家和項目完全獨立,我會建議您的工程師在本地創建該結構,並將您的存儲庫命名爲${platform}-${country}-${project}以保留該詳細信息。

如果您願意,您可以明顯編寫結帳流程以建立該結構,並且您可以查看諸如mr之類的工具或設計用於處理來自單個位置的多個存儲庫的工具(如果需要)。另一方面,如果您的項目非常相似,您可以查看分支機構,也可以使用git rebase驅動的工作流程,這可能會使您更容易將常見更改合併到系統中。

1

是的,這是非常普遍的,強烈建議每個項目都有一個回購(回收在Git/Hg中比在SVN中更輕量級)。這樣,那些需要結賬(克隆)只有一個項目的人才能這樣做。否則,每個人都必須克隆整套項目。但是,想要所有東西的人都必須逐一克隆。所以如果你沒有看到有分支機構,你可以把所有的項目都放在一個回購項目中(因爲如果你把它們全部組合在一起,分支就不能在項目層面上進行,因此如果你分支的話,每個項目回購都是必要的)。

根據文件夾對回購分類進行分類,以便URL顯示[email protected]/platform1/Country1/CustomerA/project1.git等的分類。請注意,如果您將項目放在單個回購站中,則無法獲得此類網址。您將只有[email protected]/repo.git或類似的東西。

查看權衡並決定或者一個回購或多個回購。你甚至可能想通過平臺等進行分組,而不是項目。

您可以使用網頁界面(如GitWeb或cgit)瀏覽回購站。

1

你想要一個項目的回購。這樣可以減少處理較低項目時需要保留的本地數據量:與SVN不同,您可以在每個回購副本中查看每個更改的完整歷史記錄。它也使得一個項目的提交在執行git log時不會與其他項目的提交交叉。

然後,您添加一個頂級回購處理您的頂級結構。在該回購中,您爲每個葉回購添加git子模塊。人們總是開始克隆/拉動頂層結構,然後只用項目git submodule updategit pull檢查他們需要的項目。

頂層項目將跟蹤您可以使用或不使用的子模塊的頭部哈希,具體取決於您的偏好。