2014-01-07 185 views
0

我是新手,請保持溫柔。存儲庫已創建後爲Subversion存儲庫創建標籤和分支

我們在我的工作中使用顛覆來追蹤我們從另一個實體接收到的相當大的軟件項目的變化。但是,由於我們從未分發我們的軟件,因此我們沒有遵循我們存儲庫的傳統幹線/標籤/分支層次概念。我們簡單地使用創建存儲庫:

svnadmin create /data/svn/projectName 

在服務器上,然後 SVN進口SRC的svn:// svnserver/PROJECTNAME -m「首次進口」 在客戶端上,然後我們看看到工作目錄。

但是,現在我想爲我們的各種軟件版本添加標籤。我曾試圖重組庫以下幾個環節,如:

http://grand-prismatic.blogspot.com/2013/08/add-trunk-tags-branches-directory.html

但也許我不明白他們在做什麼。我認爲trunk/branches/tags目錄是存儲庫結構的一部分,但不是源代碼物理結構的一部分。當我遵循上面的鏈接時,我在工作副本中找到了標籤/分支/主幹目錄,這是我不想要的。

我誤解了標籤和分支的功能嗎?有沒有辦法將標籤目錄添加到存儲庫中,而不必將其顯示在我的工作副本中?

+0

沒有,你簽出該項目的「根」,是沒有辦法「改寫」這一點。你可以做的是將你的工作副本切換到'/ trunk'(或你想要的分支/標籤)。標籤和分支是svn中的目錄(與其他一些vcs相反)。 – Wrikken

回答

1

您不需要檢出標籤目錄。通常情況下,您將使用主幹下的內容或您的某個分支下的內容。您可以查看存儲庫的任何部分(中繼線,或中繼線內的一個目錄)到您的工作目錄。

標籤目錄的內容將成爲trunk或任何分支的「標籤」或時代版本。例如,當一個版本被測試並準備好從trunk或分支複製到標籤目錄時,該目錄將在發佈時保存所有正確的版本。

不強制執行目錄名稱trunk,tags,branch。你可以隨心所欲地給他們打電話。在習慣上最好使用這些名字,因爲當你引用svn命令的時候,解釋會和你的svn設置一致。如果你只有一個代碼流(trunk)並且不偏離工程代碼,並且你永遠不需要製作特定版本的標籤,那麼你可以簡單地使用一個目錄來保存你的所有版本到SVN倉庫中。

此命令將退房BRANCH1到您指定的目錄(/ BRANCH1-SRCDIR):

svn co SVN-URL/branch1 /branch1-srcdir 

或類似幹線:

svn co SVN-URL/trunk /trunk-srcdir 
1

這就是顛覆的工作原理。您通過檢查或切換到分支來使用分支。

REPO_ROOT 
├── branches 
│   ├── feature1 
│   └── feature2 
├── tags 
└── trunk 

您不想簽出REPO_ROOT。您想結算子目錄,如/trunk/branches/feature1。您可以切換到不同的分支這樣的:

svn switch ^/branches/feature2 

可以從這樣的主幹創建一個新的分支:

svn cp ^/trunk ^/branches/newfeature 

這並不意味着文件是在倉庫裏重複。新分支有點像文件系統中的符號鏈接,因爲它不會重複任何內容,但Subversion有自己的方法來實現這種效率。

如果簽出整個REPO_ROOT,內部存儲庫結構將作爲常規文件系統在您的計算機上重新創建,這將是巨大的。人們不這樣使用Subversion。你總是檢查你想要的分支。

UPDATE

當你創建一個回購協議,將有一個這樣的物理目錄結構:

$ svnadmin create myrepo 
$ tree myrepo/ -L 1 
myrepo/ 
├── conf/ 
├── db/ 
├── format 
├── hooks/ 
├── locks/ 
└── README.txt 

這有沒有關係是版本控制下的結構中,/trunk/branches/tags佈局。新的存儲庫中創建完全空白:

# this outputs nothing 
svn ls file://$PWD/myrepo 

/trunk/branches/tags佈局僅僅是一個慣例。如果你決定使用它,你必須創建自己的佈局,比如像這樣:

$ svn checkout file://$PWD/myrepo mycheckout 
Checked out revision 0. 
$ cd mycheckout/ 
$ mkdir -v trunk branches tags 
mkdir: created directory `trunk' 
mkdir: created directory `branches' 
mkdir: created directory `tags' 
$ svn add * 
A   branches 
A   tags 
A   trunk 
$ svn commit -m 'created standard layout' 
Adding   branches 
Adding   tags 
Adding   trunk 

Committed revision 1. 

在此之後,我只想垃圾的mycheckout目錄,然後簽出/trunk並添加另一個項目文件提交。

此佈局在myrepo的物理目錄中不可見。只有當您使用回購瀏覽器或使用svn ls URL命令瀏覽回購內容時纔會看到它。

您可以在此處詳細瞭解所推薦的版本庫佈局:

http://svnbook.red-bean.com/en/1.7/svn.tour.importing.html#svn.tour.importing.layout

+0

感謝您的回答。我開始明白髮生了什麼,但是,我仍然對似乎是這樣一個微不足道的概念感到困惑,因爲它只是假定每個人都理解它。 如果我使用svnadmin create/usr/tmp/svn/repos我在/ usr/tmp/svn中得到了一個名爲repos的subversion版本庫。現在我假設您的帖子中的回購對應於REPO_ROOT。該目錄現在包含典型存儲庫中的conf,dbs等stuf。那麼我如何重組版本庫,使其在回收站下是trunk/tags/branches,conf,dbs等是在trunk下? – user3170250

+0

@ user3170250我在帖子中添加了更多解釋。 – janos