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命令來創建存儲庫等操作。
(筆者發現本文被查看的次數比較多,所以對內容進行了一下排版,例如粗體,斜體等的控制,以便于閱讀。)
原文:http://blog.csdn.net/sunjavaduke/archive/2009/03/04/3957511.aspx