2010-11-23 57 views
3

我很初學版本控制系統,所以請原諒我。SVN:爲舊版本創建一個文件夾

我的項目由兩個較小的應用程序組成,這兩個應用程序都在它們自己的SVN存儲庫中。另外,我在這些應用程序之間共享一個存儲庫(svn:externals)。

當新版本發佈時,我想爲該版本創建一個文件夾(包括源文件等)。庫單個應用程序應該是這個樣子:

.UI 
    . "old versions" 
     . 1.0 
     . 2.0 
     . 2.5 
    . trunk (current development version 3.0) 

所以我的問題是:

  1. 什麼是這種(在SVN)的結構的正確名稱?
  2. 我如何創建它?
  3. 是否可以凍結這些舊版本(防止更改該文件夾)?
  4. 有沒有更好的方法來實現這一目標?

回答

3
  1. 「標記」是此文件夾的標準名稱和正確名稱。
  2. 「svn copy」是您創建它的朋友。許多持續集成產品將有一個選項自動標記的構建。
  3. 是的,你可以用「預先掛鉤」來凍結它們(見下面)。
  4. 這是標準的做事方式。如果偏離太遠,會混淆其他用戶。

一個例子預COMIT鉤(用於Windows),我們使用此:

@echo off 
SET SVNLOOK=C:\Program Files\CollabNet Subversion Server\svnlook.exe 
SET GREP=D:\SVN\REPO\hooks\grep.exe 

REM Prevent changes to tags. 
("%svnlook%" changed -t %2 %1 | "%grep%" "^U.*/tags/") && (echo Cannot commit an update to a tag.>&2 && exit 1) 

REM Prevent commits without comments. 
("%svnlook%" log -t %2 %1 | "%grep%" "[a-zA-Z0-9]") || (echo You must specify a comment for all actions.>&2 && exit 1) 

exit 0 

要手動創建標籤,使用如下命令:

svn copy "http://your/repo/UI/trunk" "http://your/repo/UI/tags/v3.0" -m "Tagging v3.0" 
+0

不錯的預先提交腳本!我可能不得不採用這種方式,總會有人不評論! – Martin 2010-11-23 14:25:38

+0

謝謝你的回答! – Routa 2010-11-23 14:25:50

+0

@Routa:如果這對你有幫助,請投票和/或接受答案。 :) – 2010-11-23 14:27:07

1
  1. 分行,標籤和行李箱
  2. 在結賬創建的文件夾,然後提交它們,然後用「分支/標籤」(TortoiseSVN的)或「SVN副本」爲CMD線SVN創建你的軀幹的標籤
  3. 你在某個標記你的軀幹點例如V1,V2,V3 - 這讓你的資料庫的記錄在當前時間,你可以隨時回去給他們
  4. 這是實現這一

分行用於重大變化的方式,你應該不在幹線上(如果你正在與一羣開發者合作)。您創建一個分支,每天將樹幹合併到分支上,以避免稍後發生合併衝突。然後,當完成分支上的主要更改後,您將重新合併到主幹上。

當您準備好發佈時,您會創建整個主幹的標籤。然後從那裏釋放。如果將來你想回到某個特定的版本,那麼你在你的標籤中有這個歷史參考。標籤在某個時間點只指向您的存儲庫,例如例如,當你的中繼線位於rev 35335時,請使用rev 25123。

1

你應該通過http://svnbook.com Subversion在線參考的前幾章。這將使您在版本控制和Subversion上都能夠快速而良好地開始。

你正在做的事情非常接近Subversion的工作方式。你有這些目錄嗎?

在標準的Subversion設置中,你設置了一個「tags」,「branches」和「trunk」目錄。有些人將其設置在其存儲庫的根目錄中,其他人則將其設置在每個項目的根目錄下。

例如:我見過

svn://svn/trunk/proj1 
svn://svn/trunk/proj2 
svn://svn/branches/proj1/1.2 
svn://svn/branches/proj2/3.4 

svn://svn/proj1/trunk 
svn://svn/proj2/trunk 
svn://svn/proj1/branches/1.2 
svn://svn/proj2/branches/3.4 

大多數網站做最後的方式,但是也可以做第一種方式(主要是由於使用的優點svn:externals以及您結帳時的情況,您的結帳默認情況下不會被稱爲trunk)。

所有你需要做的就是打電話給你的「舊版本」目錄tags和你所有的設置:

svn://svn/UI/tags/1.0 
svn://svn/UI/tags/2.0 
svn://svn/UI/tags/2.5 
svn://svn/UI/trunk 

如果您忘記做出標記,恐慌,你們不要!關於Subversion的一個很棒的事情是版本庫的版本號。這就像每次做提交時都做一個標籤。如果你能找到的版本號,當你做了一個版本(通常是通過看svn log),然後你可以複製版本創建您的標籤:

$ svn cp -r1234 svn://svn/UI/trunk svn://svn/UI/tags/2.0 

正如你所看到的,你用svn cp命令創建標籤和分支。順便說一下,修改標籤非常容易,而不會意識到它。在大多數站點中,它們都有一個預先提交的鉤子,它可以阻止大多數用戶在標籤目錄下進行提交(這意味着您必須創建標籤),或者允許用戶創建標籤(通過svn cp),但不允許用戶修改標籤一旦創建。如果你想看看它,我有一個Perl版本的預提交鉤子,在http://dl.dropbox.com/u/433257/new_svn_hooks.zip