我們在一些著名開源項目的版本庫中,通??梢钥吹絫runk, branches, tags等三個目錄。由于SVN固有的特點,目錄在SVN中并沒有特別的意義,但是這三個目錄卻在大多數(shù)開源項目中存在,這是因為這三個目錄反映了軟件開發(fā)的通常模式。
trunk是主分支,是日常開發(fā)進(jìn)行的地方。
branches是分支。一些階段性的release版本,這些版本是可以繼續(xù)進(jìn)行開發(fā)和維護(hù)的,則放在branches目錄中。又比如為不同用戶客制化的版本,也可以放在分支中進(jìn)行開發(fā)。
tags目錄一般是只讀的,這里存儲階段性的發(fā)布版本,只是作為一個里程碑的版本進(jìn)行存檔。
比如一個項目有main.cpp, common.h兩個文件,假設(shè)目前在開發(fā)的是最新的3.0版本,而且1.0/2.0版本也在進(jìn)行維護(hù),那么項目樹將類似如下樣子:
project
|
+-- trunk
+ |
+ +----- main.cpp (3.0版本的最新文件)
+ +----- common.h
+
+-- branches
+ |
+ +-- r1.0
+ + |
+ + +---- main.cpp (1.x版本的最新文件)
+ + +---- common.h
+ +
+ +-- r2.0
+ |
+ +---- main.cpp (2.x版本的最新文件)
+ +---- common.h
+
+-- tags (此目錄只讀)
|
+-- r1.0
+ |
+ +---- main.cpp (1.0版本的發(fā)布文件)
+ +---- common.h
+
+-- r1.1
+ |
+ +---- main.cpp (1.1版本的發(fā)布文件)
+ +---- common.h
+
+-- r1.2
+ |
+ +---- main.cpp (1.2版本的發(fā)布文件)
+ +---- common.h
+
+-- r1.3
+ |
+ +---- main.cpp (1.3版本的發(fā)布文件)
+ +---- common.h
+
+-- r2.0
+ |
+ +---- main.cpp (2.0版本的發(fā)布文件)
+ +---- common.h
+
+-- r2.1
|
+---- main.cpp (2.1版本的發(fā)布文件)
+---- common.h
要使用這樣的文件夾結(jié)構(gòu),在建立項目版本庫時,可首先建好項目文件夾,并在其中建立trunk, branches, tags三個空的子目錄,再將項目文件夾連同這三個子目錄一起導(dǎo)入版本庫。
這樣在trunk中開始進(jìn)行開發(fā),當(dāng)需要建立branch或tag時,使用SVN的copy操作進(jìn)行。
其中tags目錄需要只讀,可以使用SVN中的authz文件控制該目錄的訪問權(quán)限為只讀。