2009-02-21 98 views
29

我剛剛創建了一個Google Code SVN存儲庫,用於存儲我的學校項目和作業,並允許在學校和家中輕鬆轉換。一個SVN存儲庫中的許多項目的文件夾結構?

它會創建默認目錄爲:

https://simucal-projects.googlecode.com/svn/trunk/
https://simucal-projects.googlecode.com/svn/tags/
https://simucal-projects.googlecode.com/svn/branches/

我從來沒有使用一個存儲庫的項目不止一個,但是看完後:One svn repository or many?我我決定爲我所有的隨機學校項目建立一個單一的存儲庫。

我應該只複製上面的文件夾結構,但對於每個項目?

https://simucal-projects.googlecode.com/svn/projectA/trunk/
https://simucal-projects.googlecode.com/svn/projectA/tags/
https://simucal-projects.googlecode.com/svn/projectA/branches/

https://simucal-projects.googlecode.com/svn/projectB/trunk/
https://simucal-projects.googlecode.com/svn/projectB/tags/
https://simucal-projects.googlecode.com/svn/projectB/branches/

這是你的多項目功能於一身的回購人做什麼?

回答

43

你有兩個選擇。你已經提到的,那就是對每個項目的中繼線(選項1):

https://simucal-projects.googlecode.com/svn/projectA/trunk/ 
https://simucal-projects.googlecode.com/svn/projectA/tags/ 
https://simucal-projects.googlecode.com/svn/projectA/branches/ 

https://simucal-projects.googlecode.com/svn/projectB/trunk/ 
https://simucal-projects.googlecode.com/svn/projectB/tags/ 
https://simucal-projects.googlecode.com/svn/projectB/branches/ 

方案2將有一個行李箱,每個項目是在後備箱的子文件夾:

https://simucal-projects.googlecode.com/svn/trunk/projectA/ 
https://simucal-projects.googlecode.com/svn/tags/projectA/ 
https://simucal-projects.googlecode.com/svn/branches/projectA/ 

https://simucal-projects.googlecode.com/svn/trunk/projectB/ 
https://simucal-projects.googlecode.com/svn/tags/projectB/ 
https://simucal-projects.googlecode.com/svn/branches/projectB/ 

選項1的優點是您可以獨立分支和標記每個項目。如果您需要分別部署每個項目,這是可取的。

如果所有項目一起部署,選項2是可取的。這是因爲您在部署時只需標記一次存儲庫。

由於您在學校項目中使用Subversion,因此您需要問自己是否需要標記您的工作。你也可以問問你自己是否需要創建分支(如果你想嘗試一下,你可能會想要)。您還需要問自己,您是否願意將所有工作作爲一個整體進行分工,您是否喜歡獨立分支每個項目的靈活性。

我總是遵循的經驗法則:樹幹在一起,無論我們一起部署。

(順便說一句 - 你可以在同一個版本庫許多樹幹 - 這幾乎相當於其在多個存儲庫一個行李箱,除了每個庫維護它自己的版本計數器,你不能存儲庫之間的合併。)

9

這就是我用於我的家庭源代碼管理。

在哪裏我只有一個主存儲庫。

存儲庫/ PROJECT1 /中繼線
存儲庫/ PROJECT1 /標籤
存儲庫/ PROJECT1 /分行

存儲庫/ Project2的/中繼線
存儲庫/ Project2的/標籤
存儲庫/ Project2的/分行

我喜歡這種結構,很容易引用項目並保持完整性。

+0

我強烈支持這種佈局。我聽到Pawel說什麼,如果倉庫在svn和使用git一樣容易創建和管理,我同意。但是,如果你可以把每個項目*看作是它自己的存儲庫,那麼事情就會很好地發揮作用。 – 2009-02-21 22:50:01

+0

是的,在描述的場景中,無論如何,擁有多個存儲庫佈局似乎都不切實際。您可以爲主存儲庫進行簡單獲取,以選擇所有代碼或單獨獲取每個項目。 – 2009-02-22 01:13:30

+0

此外VS2008&AnkhSVN 2.0它是非常易於管理和易於使用多項目解決方案等 – 2009-02-22 01:14:07

1

這個問題沒有明確的答案,因爲它取決於最適合您的項目的是什麼。

  1. 如果每個項目都要進行繁重的開發工作,並且因爲它們之間沒有太多連接(獨立的組件/項目),所以需要分離所有東西,所以我會使用/ projectA/trunk佈局。但是,您也可以爲每個項目使用一個SVN存儲庫。請記住,您將無法使用svn co http://..../svn/檢出所有項目,因爲這樣也會從所有項目中獲取所有標記和分支,而不僅僅是中繼。
  2. /trunk/projectA如果您的項目/組件緊密地結合在一起,並且您需要從同一修訂版(如與主項目非常接近的庫)標記和分支它們,那麼它肯定會更好。如果你喜歡,你也可以使用svn co http://.../svn/trunk/來獲得他們最新主幹版本的所有項目。

從可維護性的角度來看,我幾乎總是更喜歡第二種方式;但是如果您的項目變得更大並且可能會延長,那麼最好爲每個項目使用單獨的存儲庫。

除此之外:請檢查您是否真的需要Google代碼服務作業,因爲它的目的是支持OSS。您可以在本地甚至通過SSH使用SVN,這樣您也可以將存儲庫放在USB存儲棒或某些可以遠程訪問的計算機上;你並不需要託管。也可能存在隱私問題。

+2

那麼,我的代碼將是開源的,只是因爲它是爲了學校並不意味着它沒有任何潛在價值。特別是我在遺傳算法方面的工作,人們可能會發現它很有價值。 Google代碼正是爲此而設計的。 – mmcdole 2009-02-21 21:12:51

1

如果你堅持只有一個存儲庫(我不喜歡自己陣營)並做分支,那麼我認爲你的建議是好的。但是,我認爲SVN存儲庫等同於一個項目。

6

一個真實的例子:Apache Projects repository

1

跟蹤文件夾佈局(版本控制)的主要目標之一是訪問控制管理。

如果有需要分離開發隊伍(誰在Trunk的工作),並保持隊伍(誰處理分行)這種結構是好的:

/trunk 
     /Project1 
     /Project2 
/branches 
     /Project1 
     /Project2 
/tags 
    /Project1 
    /Project2 

如果我們要允許每個項目的訪問一個特定的用戶組,這個結構很好:

/Project1 
     /trunk 
     /branches 
     /tags 
/Project2 
     /trunk 
     /branches 
     /tags