Subversion Tools(幾種Subversion工具的安裝使用)
0.關於Subversion
Subversion具有以下的特點:
幾乎所有的CVS特點-Subversion的初衷就是開發一個更好的CVS。
目錄和檔案都被版本化。
拷貝、刪除操作被版本化。
靈活的版本化metadata。
commit原子化。
Branching和tagging簡單易用。
整合tracking。
檔案locking。
符號連結可以被版本化。
Apache網路伺服器選項,通過WebDAV/DeltaV協議。
獨立的伺服器選項-svnserve。
可轉換的輸出。
本地化訊息。
可互動的衝突解決方案。
Repository唯讀映射。
....
關於更詳細的資訊,請參考:http://subversion.tigris.org/features.html
關於Subversion的FAQ列表,中文翻譯小組進行了翻譯,請參考http://subversion.tigris.org/faq.zh.html。感謝中文翻譯小組所作出的貢獻。
一個典型的Subversion工作流程如下(摘自Subversion中文協助):
典型的工作周期是這樣的:
更新你的工作拷貝
svn update
做出修改
svn add
svn delete
svn copy
svn move
檢驗修改
svn status
svn diff
可能會取消一些修改
svn revert
解決衝突(合并別人的修改)
svn update
svn resolved
提交你的修改
svn commit
SVN的命令集如下:
add
blame (praise, annotate, ann)
cat
checkout (co)
cleanup
commit (ci)
copy (cp)
delete (del, remove, rm)
diff (di)
export
help (?, h)
import
info
list (ls)
lock
log
merge
mkdir
move (mv, rename, ren)
propdel (pdel, pd)
propedit (pedit, pe)
propget (pget, pg)
proplist (plist, pl)
propset (pset, ps)
resolved
revert
status (stat, st)
switch (sw)
unlock
update (up)
可以使用svn help或者svn help subcommand(例如svn help checkout)來擷取協助。
一般來說,使用圖形化的GUI來作為Subversion的用戶端使得操作更加的簡單易用,注入Toitorse SVN或者CollabNet的Subversion用戶端工具,如果使用整合式開發環境,例如Eclipse,MS Visual Studio,NetBeans等,都會具有對應的Subversion Plugin的支援,以去除手動使用SVN用戶端命令的繁瑣操作,另外使用命令列工具的一個缺點就是進行同步(diff)命令時,顯示的格式不夠方便使用(與整合IDE的外掛程式相比)。
所以本文主要介紹伺服器端的版本庫的搭建與設定,而不涉及用戶端的使用(命令列或者IDE用戶端)
1.Subversion工具種類
如果僅僅需要安裝一個版本庫,那麼只需要構建一個Subversion用戶端,用戶端可以是命令列用戶端,也可以是GUI用戶端。
如果需要一個網路的版本庫,那麼需要安裝Apache2伺服器或者一個svnserve伺服器。
相對於win32的發布包,Subversion更多的應用於*nix伺服器,畢竟就穩定性可安全性而言,*nix系列伺服器要優於windows伺服器(筆者個人認為)。
可以在如下連結:http://subversion.tigris.org/getting.html擷取各個作業系統的Subversion工具。
本文中的作業系統平台為Win32。
接下來筆者將根據以下幾種方式搭建SVN網路伺服器。
a.Tigris.org : svn-win32-1.5.5 + Apache 2.2.11
http://subversion.tigris.org/files/documents/15/44589/svn-win32-1.5.5
http://labs.xiaonei.com/apache-mirror/httpd/binaries/win32/apache_2.2.11-win32-x86-openssl-0.9.8i.msi
b.CollabNet (Certified binaries)
CollabNetSubversion-server-1.5.5-1
http://downloads-guests.open.collab.net/files/documents/61/1373/CollabNetSubversion-server-1.5.5-1.win32.exe
c.VisualSVN (VisualSVN Server)
VisualSVN-Server-1.6.3
http://www.visualsvn.com/files/VisualSVN-Server-1.6.3.msi
(基於Subversion1.5.5版本構建)
d.SlikSVN
SlikSVN1.5.6
http://www.sliksvn.com/pub/Slik-Subversion-1.5.6-win32.msi
上述軟體均為開源軟體。其中CollabNet公司對開發Subversion的部分全職工作人員提供薪水,並且擁有部分Subversion代碼的著作權,但是該著作權是BSD/Apahce風格的著作權,即可以隨心所欲的去下載,修改,或者重新發布新的版本,而不需要經過CollabNet公司或者其他任何一個人的許可。
FAQ:我現在所啟動並執行是Apache 1.x,但是我不能僅僅為了支援Subversion版本庫而將其轉換成Apache 2.0。這是否意味著我不能使用Subversion伺服器?
不必,你可以用svnserve作為Subversion的伺服器,它可以很好的工作。
在使用Apache server時,如果你想使用分布式創作和版本管理協議(WebDAV)和所有其他一些好的功能特性,那麼是的,你需要Apache 2.0。但是不管怎樣,當你繼續在80連接埠運行Apache1.0的時候,你總是可以在另外一個不同的連接埠運行Apache2.0。不同版本的 Apache可以在同一台機器上很好的和平相處。僅僅需要在改變httpd.conf檔案中把Listen指令從80改成8080,或者其他你想要改成的連接埠。然後確保在你公布版本庫的URL的時候加以說明:(例如,http://svn.mydomain.com:8080/repos/blah/trunk/)。
2.Subversion Win32 + Apache 2.11
a.安裝SVN:將Subversion Win32解壓縮到本地目錄,Subversion的安裝路徑為$SVN_HOME,例如F:/svn-win32-1.5.5。下文中使用$SVN_HOME表示SVN的安裝目錄。
b.安裝Apache HTTP伺服器:執行安裝程式,安裝路徑為$HTTPD_HOME,例如F:/apache2.2。下文中使用$HTTPD_HOME表示Apache HTTP伺服器的安裝目錄。
註:Apache HTTP伺服器預設使用80連接埠,如果80連接埠已經被佔用,請修改$HTTPD_HOME/conf/httpd.conf檔案,將Listen 80修改為其他的連接埠。例如8080,9080等。
安裝完成後,預設會啟動apache伺服器,當工作列表徵圖狀態為綠色的三角時,表示啟動正常。
也可以通過在瀏覽器中輸入http://localhost:port/來進行測試。(預設情況下會列印It Works。)
c.建立版本庫並測試
安裝完Subversion Win32和Apache HTTP伺服器之後,就是進行配置的工作了。
首先在配置$HTTPD_HOME/conf/httpd.conf檔案:
使用LoadModule來載入mod_dav_svn模組,這個指示必須先與其它Subversion相關的其它配置出現,如果你的Apache使用預設布局安裝,你的mod_dav_svn模組一定在Apache安裝目錄的modules子目錄,LoadModule指示的文法很簡單,影射一個名字到它的共用庫的物理位置:
LoadModule dav_svn_module modules/mod_dav_svn.so
注意,如果mod_dav是作為共用對象編譯(而不是靜態連結到httpd程式),你需要為它使用LoadModule語句,一定確定它在mod_dav_svn之前:
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
將$SVN_HOME/bin/mod_dav_svn.so檔案拷貝到$HTTPD_HOME/modules目錄下。
在你的設定檔後面的位置,你需要告訴Apache你在什麼地方儲存Subversion版本庫(也許是多個),位置指示有一個很像XML的符號,開始於一個開始標籤,以一個結束標籤結束,配合中間許多的其它配置。Location指示的目的是告訴Apache在特定的URL以及子URL下需要特殊的處理,如果是為Subversion準備的,你希望可以通過告訴Apache特定 URL是指向版本化的資源,從而把支援轉交給DAV層,你可以告訴Apache將所有路徑部分(URL中伺服器名稱和連接埠之後的部分)以/repos/開頭的URL交由DAV服務提供者處理。一個DAV服務提供者的版本庫位於/absolute/path/to/repository,可以使用如下的httpd.conf文法:
<Location /repos>
DAV svn
SVNPath F:/svn/repos
</Location>
如果你計劃支援多個具備相同父目錄的Subversion版本庫,你有另外的選擇,SVNParentPath指示,來表示共同的父目錄。舉個例子,如果你知道會在/usr/local/svn下建立多個Subversion版本庫,並且通過類似http://my.server.com/svn/repos1,http://my.server.com/svn/repos2的URL訪問,你可以用後面例子中的httpd.conf配置文法:
<Location /svn>
DAV svn
SVNParentPath F:/svn
</Location>
使用上面的文法,Apache會代理所有URL路徑部分為/svn/的請求到Subversion的DAV提供者,Subversion會認為SVNParentPath指定的目錄下的所有項目是真實的Subversion版本庫,這通常是一個便利的文法,不像是用SVNPath指示,我們在此不必為建立新的版本庫而重啟Apache。
使用$SVN_HOME/bin/svnadmin命令,建立到repos版本庫:
svnadmin create f:/svn/repos
此時開啟瀏覽器,輸入URL:http://localhost:8080/svn/repos/
即可看到一個空的版本庫,版本號碼為0。
d.設定授權
在上述步驟中搭建的版本庫是沒有許可權的設定的,如果你的伺服器可以被Internet訪問,那麼任何人都可以修改你的版本庫,這通常是所不希望看到的。
通過設定授權,可以使得特定的使用者訪問特定的版本庫,或者特定的目錄。
由於Apache HTTP伺服器提供了認證的功能,其中包括基本的HTTP認證以及SSL認證認證,由於配置SSL認證認證需要使用CA(認證中心)來辦法伺服器端以及用戶端的認證,過程比較麻煩,並且對於一般的項目來說,基本的HTTP認證已經可以滿足要求。筆者接下來將介紹HTTP認證的設定方法。
首先,建立儲存使用者及密碼的檔案,這個過程通過apache HTTP伺服器提供的htpasswd.exe來完成:
F:/apache2.2/bin>htpasswd.exe -help
Usage:
htpasswd [-cmdpsD] passwordfile username
htpasswd -b[cmdpsD] passwordfile username password
htpasswd -n[mdps] username
htpasswd -nb[mdps] username password
-c Create a new file.
-n Don't update file; display results on stdout.
-m Force MD5 encryption of the password (default).
-d Force CRYPT encryption of the password.
-p Do not encrypt the password (plaintext).
-s Force SHA encryption of the password.
-b Use the password from the command line rather than prompting for it.
-D Delete the specified user.
On Windows, NetWare and TPF systems the '-m' flag is used by default.
On all other systems, the '-p' flag will probably not work.
F:/apache2.2/bin>htpasswd.exe -cm f:/svn-auth-file zzl
New password: ********
Re-type new password: ********
Adding password for user zzl
F:/apache2.2/bin>htpasswd.exe -m f:/svn-auth-file lsz
New password: ********
Re-type new password: ********
Adding password for user lsz
下一步,需要在httpd.conf檔案中的Location標記中添加一些設定來告訴伺服器如何使用密碼檔案。其中AuthType指定系統使用認證的類型,此時我們指定為Basic認證,AuthName是提供給認證地區的一個人以名稱,用於顯示在瀏覽器的快顯視窗裡,最後,AuthUserFile用於指定密碼檔案位置。
如下所示:
<Location /svn>
DAV svn
SVNParentPath F:/svn
AuthType Basic
AuthName "zzl_lsz's svn repository"
AuthUserFile "F:/apache2.2/conf/svn-auth-file"
</Location>
此時,這些設定告訴Apache當需要授權時,需要向Subversion用戶端索要使用者名稱和密碼,但是還需要告訴Apache什麼樣的用戶端需要授權的指示。哪裡需要授權,哪裡需要認證,最簡單的方式是保護所有的請求,通過Require valid-user來告訴Apache任何請求需要認證的使用者。
<Location /svn>
DAV svn
SVNParentPath F:/svn
AuthType Basic
AuthName "zzl_lsz's svn repository"
AuthUserFile "F:/apache2.2/conf/svn-auth-file"
Require valid-user
</Location>
此時就設定好了版本庫的認證。
通過重新啟動Apache伺服器,然後再次輸入:http://localhost:8080/svn/repos/時,將會彈出認證對話方塊。提示如下的訊息:
http://localhost:8080 の "zzl_lsz's svn repository" に対するユーザ名とパスワードを入力してください
只有輸入正確的使用者名稱和密碼才可以訪問版本庫。
Apache + Subversion還可以基於路徑來對使用者進行授權,諸如哪些使用者對哪些路徑具有哪些許可權。
在此不作介紹。
推薦文章:
請參考IBM DW文章:
<用 Apache 和 Subversion 搭建安全的版本控制環境>
http://www.ibm.com/developerworks/cn/java/j-lo-apache-subversion/
關於配置過程中可能出現的一些問題,例如修改Apache HTTP伺服器的httpd.conf檔案後Apache伺服器無法啟動等,關於這些問題請參考:
http://www.zxlm.cn/fh/thread-7317-1-1.html
3.CollabNet Subversion
可以在下面的URL中擷取CollabNet Subversion的windows版本安裝程式。
http://www.open.collab.net/downloads/subversion/
該版本中包含了Apache 2.2.8,ViewVC1.0.7以及Subversion1.5.6.
下載後進行安裝。
註:在安裝的第二個步驟中,會有如下的連結提示:
View installation information on openCollabNet
在這個連結中提供了針對該版本安裝程式的安裝協助以及注意事項,例如筆者安裝的協助為:
http://www.collab.net/nonav/downloads/subversion/readme/svn_1_5_server_client_windows.html
該協助中提及了對平台和配置的要求,重要的說明(Apache 2.0 -> 2.2),安裝技巧,ViewVC的安裝(必須有ActivatePython2.5.x的支援),升級過程,安裝後的指南等等。
筆者希望使用ViewVC來更好的瀏覽版本庫中的內容,所以需要安裝ActivatePython2.5.x。
下載ActivatePython2.5.4.3並安裝。
http://downloads.activestate.com/ActivePython/windows/2.5/ActivePython-2.5.4.3-win32-x86.msi
安裝完成之後,開始安裝CollabNet Subversion:
a.在"choose components"畫面選擇全部的components。
此處包含了SVNSERVE和Apache兩個組件。
b.在"svnserve configuration"畫面保留預設的port,並設定自訂的repository path,推薦使用X:/svn,其中X為磁碟機盤符。不選中"installsvnserve to run as windows service"。安裝完成後手動啟動該服務。
c.在"apache configuration"畫面進行如下的設定:
Host/Server Name:localhost
Host Port:選擇未被佔用的Port,例如10270
不選中"Install Apache to run as a Windows service"
Repository Path:自訂的版本庫路徑
Repository Local Prefix:/svn
選中"Enable ViewVC",此時在下一步中會選擇Active Python 2.5的安裝路徑。
d.選擇Active Python的安裝路徑。
e.在"Choose Install Location"畫面選擇要安裝的目標路徑。
然後進行安裝。直至安裝結束。
安裝結束後,可以通過svnserve或者apache的方式來配置svn伺服器,筆者將使用svnserve來配置版本庫。
a.開啟命令列提示符,進入到在上述安裝中b步驟設定的版本庫,然後使用svnadmin命令建立版本庫。
F:/>cd svn_collabnet_svnserve
F:/svn_collabnet_svnserve>svnadmin create my-first-database
b.建立密碼檔案
使用文字編輯器編輯F:/svn_collabnet_svnserve/my-first-database/svnserve.conf檔案。在設定檔中,可以看到如下的內容:
#password-db = passwd
將注釋用的#號去掉。
c.設定使用者和密碼
使用文字編輯器編輯passwd檔案F:/svn_collabnet_svnserve/my-first-database/,建立使用者和密碼。
joe = super-secret
可以添加任意個使用者。
d.取消防火牆限制
在啟動服務之前,確保防火牆沒有阻止該連接埠的使用。
可以在下面的連結中查看相關的設定方法:
http://www.microsoft.com/windowsxp/using/security/internet/sp2_wfexceptions.mspx
svnserve.exe是程式名稱,連接埠號碼預設為3690。
註:如果沒有設定防火牆,那麼在下一步中啟動伺服器時,windows也會彈出提示框,確認是否解除阻止。
e.啟動服務
如果選擇了將svnserve作為系統服務,那麼可以使用
net start svnserve
來啟動服務,否則的話,可以使用
svnserve -d -r F:/svn_collabnet_svnserve
來啟動服務。
f.設定許可權
可以給匿名使用者設定訪問(讀/寫)許可權。
修改F:/svn_collabnet_svnserve/my-first-database/svnserve.conf檔案,通過設定
anon-access = write
anon-access = read
anon-access = none
來為匿名使用者設定寫入權限,讀許可權和無許可權。
g.檢出項目
svn co svn://localhost/repository_name
例如
svn co svn://localhost/my-first-repos
使用Apache伺服器的配置方式與Apache + SVN win32的方式類似,只是CollabNet已經添加好了LoadModule以及SVNParentPath的設定。
只需要添加
<Location /my-first-repos>
DAV svn
SVNParentPath F:/svn_collabnet_apache/my-first-repos
</Location>
即可。
同時CollabNet已經添加了viewvc的配置:
<Location /viewvc>
#Require valid-user
AuthType Basic
AuthName "Subversion repository"
#AuthUserFile "F:/CollabNet_Subversion/httpd/conf/svn_auth_file"
</Location>
添加完成後,啟動Apache伺服器。
在瀏覽器中輸入http://localhost:8090/svn/my-first-repos/,可以看到my-first-repos的修訂版本號碼為0。
可以通過viewvc更加直觀的查看svn的內容:http://localhost:8090/viewvc/my-first-repos/
4.VisualSVN Server
首先,VisualSVN Server是完全免費的SVN伺服器。
其次,VisualSVN只通過一個安裝程式包來安裝Subversion,Apache以及管理主控台。
同時,VisualSVN(不是VisualSVN Server)是一個用於將Subversion整合到VisualStudio的工具。
VisualSVN Server是一個小巧,安裝簡單,包含了最新的組件,易升級的軟體,同時可以作為windows平台上的企業級的伺服器,包含了穩定的Apache軟體,支援SSL連結,SSL認證管理,Apache目錄認證和授權,並支援組的概念。
另外,VisualSVN Server具有方便使用的管理主控台。
下載VisualSVN Server:http://www.visualsvn.com/files/VisualSVN-Server-1.6.3.msi
該版本中包含Apache 2.2.9,Subversion1.5.5
安裝過程非常的簡單:
在"Custom Setup"畫面,進行主要的設定工作:
Location:選擇自訂的VisualSVN安裝路徑
Repositories:設定版本庫的父目錄。
Server Port:設定是否使用https以及使用的連接埠。
Authentication:可以設定是使用windows認證還是Subversion認證。
(筆者沒有使用安全的http串連,連接埠設定為8070,使用Subversion認證。)
設定完成後,進行安裝,直至完成。
安裝完成後,啟動VisualSVN Server管理主控台
在未建立任何repository之前,VisualSVN Server管理主控台主畫面顯示內容如下:
Status
VisualSVN Server is running
Server URL is http://vic-working:8070/svn/
Accounts
There are 0 users and 0 groups.
Create new user...
Create new group...
Repositories
Total 0 repositories.
Create new repository...
Import existing repository...
可以看到,在該管理畫面中,可以查看Server URL,建立使用者和組,建立新的版本庫,匯入已經存在的版本庫。
該管理主控台和windows系統的電腦管理主控台,或者MS SQLServer2000的管理主控台類似,通過捷徑功能表進行伺服器的啟動與關閉。
完全是windows風格的管理主控台。
由於筆者不方便拷貝螢幕,所以就不將snapshots放在本文中。
5.SlikSVN
下載win32版本的Slik SVN 1.5.6版本:http://www.sliksvn.com/pub/Slik-Subversion-1.5.6-win32.msi
下載完成後,進行安裝。
在"choose setup type:"畫面選擇安裝的類型,典型安裝,自訂安裝以及完整安裝。
選擇自訂安裝,進入到"Cust Setup"畫面:
這裡預設svnserve和extra tools為非選中狀態。按照預設的組件設定,進行安裝。
這個工具不包含Apache組件,只是一個獨立的命令列用戶端。
關於命令列用戶端的命令使用,請參考Subversion使用手冊。
6.參考資料
Subversion首頁:http://www.tigris.org/
如果你想更加深入的瞭解Subversion,Subversion的協助手冊是最好的參考:
Subversion中文協助:http://www.subversion.org.cn/svnbook/
Subversion英文協助:http://svnbook.red-bean.com/index.en.html
Subversion伺服器相關配置(包含在協助文檔中):http://svnbook.red-bean.com/nightly/en/svn.serverconfig.html
CollabNet首頁:http://www.open.collab.net/
VisualSVN首頁:http://www.visualsvn.com/
SilkSVN:http://www.sliksvn.com/en/home/
SVN Win32 Lib:http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91&expandFolder=91&folderID=260
Apache HTTP Server:http://httpd.apache.org
Eclipse首頁:http://www.eclipse.org
SubEclipse首頁:http://subclipse.tigris.org/
Subclipse Eclipse update site URL: http://subclipse.tigris.org/update_1.4.x
CollabNet Eclipse update site URL
For Eclipse 3.4, copy this URL:
http://downloads.open.collab.net/eclipse/update-site/e3.4
For Eclipse 3.3, copy this URL:
http://downloads.open.collab.net/eclipse/update-site/e3.3
For Eclipse 3.2, copy this URL:
http://downloads.open.collab.net/eclipse/update-site/e3.2
Tortoise SVN Client:http://tortoisesvn.tigris.org/
7.總結
一般來將,如果作為企業級的業務應用,可能不會選擇svn,比如超過1個GB的項目,例如Google的Android的版本控制工具採用了Git來控制,還有IBM公司也使用自身的資源管理工具ClearCase,但是作為小型的項目,或者群組項目,例如Apache使用的版本控制工具基本上都是svn,而如果個人開發人員為了方便版本的管理,也可以採用SVN。
一般軟體公司使用SVN的也比較多,但是可能會要求SSL串連以及進階的使用權限設定,而如果是個人開發人員,筆者推薦(在windows環境下)VisualSVN這個工具,最主要的原因就是方便易用,全部是圖形介面,不需要使用svn命令來建立存放庫等操作。
(筆者發現本文被查看的次數比較多,所以對內容進行了一下排版,例如粗體,斜體等的控制,以便於閱讀。)