SVN,即Subversion,是一個自由開源的版本控制系統,可以將數據恢復到早期版本,或者檢查數據修改的歷史,這些數據可以是源代碼,也可以是其他類型的文件。
在SVN出現之前,CVS是開源世界版本控制工具的事實標准,然而CVS存在一些固有的缺陷,並且修復這些缺陷需要耗費很大的精力,因此,SVN的發起者Brian Behlendorf和CollabNet決定重新編寫一個版本控制系統,保留CVS的基本思想,但要修正其中錯誤和不合理的特性。於是,SVN作為CVS的繼任者出現了。SVN的設計者們力圖通過兩方面的努力贏得CVS用戶的青睐:保持開源系統的設計以及界面風格與CVS盡可能類似,同時盡力彌補CVS許多顯著的缺陷。這些努力的結果使得從CVS遷移到SVN不需要作出重大的變革,因此越來越多的人選擇了SVN。
http://svnbook.red-bean.com
http://www.subversion.org.cn
目錄
一、客戶端的使用
1.1 Linux系統下一般使用(Ubuntu)
1.2 Windows系統下一般使用
1.3 Linux下使用SVN+ssh認證(未找到相關資料@_@)
1.4 Windows下使用SVN+ssh認證
二、服務器端的配置
2.1 Linux下的svnserve配置
2.2 Windows下的svnserve配置
2.3 Linux下的svnserve+ssh配置
2.4 Windows下的svnserve+ssh配置(需使用Cygwin,略)
2.5 Linux下基於APache的SVN服務器配置
2.6 Windows下基於APache的SVN服務器配置
三、建立版本庫
3.1 Linux下創建版本庫
3.2 Windows下創建版本庫
大多數人都是從客戶端開始使用SVN,以下先介紹客戶端的使用。假設已經假設好了SVN服務器,其文件夾地址為http://domain/svn/trunk/myproject,用戶名為test,密碼為test。(如果服務器端配置的是SVN,則使用svn://開頭的URL訪問;如果服務器端配置的是SVN+SSH,則使用svn+ssh開頭的URL訪問)
一、客戶端的使用
1.1 Linux(Ubuntu)系統下一般使用
1)首先需要安裝svn客戶端,ubuntu下使用$sudo apt-get install subversion(其他請baigoogledu,余同)
2)checkeout命令:第一次使用時使用checkout命令,把服務器的目錄拷貝到本地的當前目錄下,同時會建立一個隱藏文件夾記錄版本信息:
[工作目錄]$svn checkout "http://domain/svn/trunk/myproject" --username test
然後輸入密碼
3)svn update命令:獲取服務器上的最新版本
[工作目錄]$svn update(除了第一次要加url和用戶名和密碼,之後系統會記住)
4)svn add命令:要把非版本控制的本地文件添加到版本控制:
[工作目錄]$svn add hello.c
5)svn commit命令:把本地文件上傳到服務器
[工作目錄]$svn commit(如果有新的文件,要首先svn add)
1.2 Windows系統下一般使用
1)安裝客戶端:http://tortoisesvn.net/downloads
2)新建一個文件夾(工作目錄),右擊選擇checkout,填寫URL和用戶名密碼
3)工作目錄右鍵update
4)工作目錄右鍵add
5)工作目錄右鍵commit
1.3 Linux下使用SVN+ssh認證(未找到相關資料@_@)
1.4 Windows下使用SVN+ssh認證
(參考ubuntu下架設svn服務器及在windows建立svn+ssh客戶)
1.4.0 安裝TortoiseSVN、Puttygen、Pageant
http://sourceforge.net/projects/tortoisesvn
http://www.chiark.greenend.org.uk/~sgtatham/putty/
1.4.1 轉換私鑰格式
1)將Linux下的文件<username>key拷貝到windows下,運行Puttygen;
2)選擇菜單conversions->Import Key;選擇文件<username>key,提示"Enter passphrase for key",輸入創建公私鑰對示使用的passphrase關鍵字;
3)選擇Parameters為“SSH-2 DSA”或“SSH-2 RSA”->Save private key->保存文件名為username>key.ppk。
1.4.2 建立TortoiseSVN與Pageant的關聯,並將私鑰加入Pageant:
1)鼠標右鍵選擇TortoiseSVN->Settings->Network->SSH client,輸入:
C:Program FilesTortoiseSVNinTortoisePlink.exe
2)鼠標右鍵選擇TortoiseSVN->RepoBrowser 輸入URL:
svn+ssh://<username>@<SvnServiceIP>/usr/local/svn/trunk
3)運行Pageant,右鍵點擊屏幕右下角的圖標-〉Add Key,將私鑰文件<username>key.ppk加入。
——如果不想緩存ssh密碼,則第8、9步不需要,只保留第二步,但每次check out、check in中每進入一個文件夾都要輸入兩次密碼,煩死你:)
二、服務器端的配置
Web服務器部署可以有三種選擇,配置由簡單到復雜排列為
·svnserve
·svnserve over SSH
·Apache+mod_dav_svn模塊
下面從最簡單的入手,介紹svnserve。
[更新]Windows下服務器端的配置可以使用VisualSVN Server進行傻瓜化安裝。
官方網站:http://www.visualsvn.com/
參考鏈接:VisualSVN系列介紹(有詳細的安裝過程介紹,這裡就不轉述了)
2.1&2.2 配置svnserve
svnserve是一個輕型的服務器,可以同客戶端通過在TCP/IP基礎上的自定義有狀態協議通訊,客戶端通過使用開頭為svn://或者svn+ssh://svnserve的URL來訪問一個svnserve服務器。
2.1 Linux下的svnserve配置
2.1.0 同樣地,使用命令$sudo apt-get install subversion
2.1.1 svnserve作為獨立守護進程,監聽請求
$svnserve -d
$ #svnserve is now running, listening on port 3690
——可以使用--listen-port=[端口號]來指定端口,或者--listen-host=[主機名]來指定主機名
假定已經建立一個版本庫位於/usr/local/repositories/project路徑(版本庫的建立稍後提及), 此時客戶端可以使用svn://[主機]/usr/local/repositories/project來進行訪問
——可以使用-r選項來限制只輸出指定路徑下的版本庫,從而使客戶端訪問更為簡潔:
$svnserve -d -r /usr/local/repositories
則客戶端只要使用svn://[主機]/project就可以訪問
2.1.2 通過inetd使用svnserve
$svnserve -i
——此時svnserve會嘗試使用自定義協議通過stdin和stdout來與subversion客戶端通話,默認端口為3690。可以在/etc/services添加如下幾行:
svn 3690/tcp #subversion
svn 3690/udp #subversion
——如果是使用經典的類Unix的inetd守護進程,可以在/etc/inetd.conf添加如下行,則如果有客戶連接來到端口3690,inetd會產生一個svnserve進程來做服務
svn stream tcp nowait svnowner /usr/bin/svnserve svnserve -i
2.1.3 設置svnserve的內置認證