1、SVN簡介
SVN是一種版本管理系統,前身是CVS,是開源軟件的基石。即便在溝通充分的狀況下,多人維護同一份源代碼的必定也會出現混亂的狀況,版本管理系統就是爲了解決這些問題。
mysql
SVN中的一些概念:
repository(源代碼庫)
源代碼統一存放的地方
Checkout (提取)
當你手上沒有源代碼的時候,你須要從repository checkout一份
Commit (提交)
當你已經修改了代碼,你就須要Commit到repository
Update (更新)
當你已經Checkout了一份源代碼, Update一下你就能夠和Repository上的源代碼同步,程序員
你手上的代碼就會有最新的變動
平常開發過程其實就是這樣的(假設你已經Checkout而且已經工做了幾天):Update(得到最新的代碼);做出本身的修改並調試成功; Commit(你們就能夠看到你的修改了)
若是兩個程序員同時修改了同一個文件呢?SVN能夠Merge這兩個程序員的改動,對,合併,實際上SVN管理源代碼是以行爲單位的,就是說兩個程序員只要不是修改了同一行程序,SVN都會自動合併兩種修改。若是是同一行呢,SVN會提示文件Conflict, 衝突,須要手動確認。sql
TortoiseSVN簡介
數據庫
TortoiseSVN 是 Subversion 版本控制系統的一個免費開源客戶端,能夠超越時間的管理文件和目錄。文件保存在中央版本庫,除了能記住文件和目錄的每次修改之外,版本庫很是像普通的文件服務器。你能夠將文件恢復到過去的版本,而且能夠經過檢查歷史知道數據作了哪些修改,誰作的修改。這就是爲何許多人將 Subversion 和版本控制系統看做一種「時間機器」。瀏覽器
2、SVN的配置緩存
服務器端的配置
服務器
一、配置好yum,檢查subversion安裝包tcp
#檢查是否安裝了低版本的SVN#卸載舊版本SVNide
[root@svn /]# rpm -qa | grep subversion
[root@svn /]# yum remove subversion
#安裝SVN
[root@svn /]# yum install httpd httpd-devel subversion mod_dav_svn mod_auth_mysql
#確認已安裝了svn模塊
[root@svn /]# cd /etc/httpd/modules
[root@svn modules]# ls | grep svn
mod_authz_svn.so
mod_dav_svn.sosvn
#測試安裝是否成功,顯示版本說明安裝成功
[root@svn ~]#svnserve --version
二、建立svn版本庫
[root@svn /]# mkdir -p /data/svndata
[root@svn /]# svnadmin create /data/svndata/winne //winne爲版本庫名稱
執行上面的命令後,自動創建winne庫,查看/data/svndata/winne 文件夾發現包含了conf, db,format,hooks, locks, README.txt等文件,說明一個SVN庫已經創建。
三、svnserve配置文件概述
svnserve.conf --svn服務配置文件,該文件版本庫目錄的conf目錄下。
passwd -- 用戶名口令文件,該文件名在文件svnserve.conf中指定。
authz -- 權限配置文件,該文件名也在文件svnserve.conf中指定。
(1)conf/svnserve.conf 文件
配置項分爲如下5項:
anon-access 控制非鑑權用戶訪問版本庫的權限。
auth-access 控制鑑權用戶訪問版本庫的權限。
password-db 指定用戶名口令文件名。
authz-db 指定權限配置文件名,經過該文件能夠實現以路徑爲基礎的訪問控制。
realm 指定版本庫的認證域,即在登陸時提示的認證域名稱。
若兩個版本庫的認證域相同,建議使用相同的用戶名口令數據文件
[root@svn /]# vi /data/svndata/winne/conf/svnserve.conf [general] #匿名訪問的權限,能夠是read,write,none,默認爲readanon-access=none #使受權用戶有寫權限 auth-access=write #密碼數據庫的路徑 password-db=passwd #訪問控制文件 authz-db=authz #認證命名空間,subversion會在認證提示裏顯示,而且做爲憑證緩存的關鍵字 realm=/data/svndata/ |
(2)conf /Passwd 文件
[root@svn /]# vi /data/svndata/winne/conf/passwd [users] # harry = harryssecret# sally = sallyssecret user1=123456 user2=123456 |
(3)conf /authz 文件
[root@svn /]# vi /data/svndata/winne/conf/authz [groups] 設置組 admin = user1 [/] 根目錄權限設置(就是「svndata」這個文件夾) user1 = rw 用戶1權限是:可讀寫 user2 = r 用戶2權限是:可讀,不可寫 @admin = rw 設置組權限 [svndata:/winne] 設置根目錄下「winne」文件夾的權限 user1 = rw user2 = r …以此類推 |
四、配置防火牆
[root@svn /]# vi /etc/sysconfig/iptables 添加如下內容: -A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT 保存後重啓防火牆 [root@svn /]# service iptables restart |
五、啓動和中止SVN服務
啓動SVN服務:
[root@svn ~]# svnserve -d -r /data/svndata/
-d表示後臺運行
-r 指定根目錄是/data/svndata/
中止SVN服務:
[root@svn ~]# killall svnserve
3、SVN的使用
客戶端使用
Windows客戶端TortoiseSVN的使用
一、TortoiseSVN 客戶端的安裝
測試選擇的是TortoiseSVN 1.6.5客戶端付中文漢化包.
二、客戶端的文件更新至服務器(user1操做)
新建一個空目錄,右鍵Checkout (提取)
svn://192.168.103.26/winne
輸入passwd文件中的受權用戶賬號就能夠了
在目錄中加入一些文件測試. 而後在空白地方右鍵點TortoiseSVN; ADD 添加列表到服務器端.此時並無真正拷貝到服務器上,需再在Commit(提交)操做纔會拷貝
在版本庫瀏覽器中就能夠看到剛纔提交的文件了,此時提交的版本爲1.
三、客戶端在服務器上拉讀取數據(user2操做)
User2 在機器上新建一個空目錄user2 , 右鍵Checkout (提取)
填入地址: svn://192.168.103.26/winne 輸出至G:\user2肯定
增長一個new.txt的文件,而後Commit (提交)以後提示權限出錯,user2沒有寫的權限,換成user1 的身份才能夠提交成功.
Linux客戶端的使用
客戶端操做流程通常是:
用戶A:checkout (提取); add (添加新文件); commit (提交)
用戶B:SVN log(查看更新); update(更新版本)
一、SVN的安裝
[root@TEST ~]#yum -y install subversion
二、Linuxsvn的經常使用命令
()內爲命令簡寫.
checkout (co) 提取
commit (ci)提交
update (up) 更新
list (ls)列表
三、checkout (co) 提取 svn服務器上的文件
(user1)操做流程
[root@TEST ~]#svn co svn://192.168.103.26/winne
Authentication realm: <svn://192.168.103.26:3690> My First Repository
Password for 'root':
Authentication realm: <svn://192.168.103.26:3690> My First Repository
Username: user1 //輸入用戶名
Password for 'user1': //輸入密碼
A winne/Cosmic Ride - BeFour.lrc
A winne/20070716171657126.pdf
A winne/svnbook.pdf
revision 1./ checkout (co) 提取成功,看到Checked out版本爲1
注:可使用帶用戶名和密碼的訪問:
svn co --username user1 --password user1 svn://192.168.103.26/winne
[root@TEST ~]# ll
drwxr-xr-x 3 root root4096 Sep 23 09:02 winne //winne目錄是SVN自動生成的
drwxr-xr-x 2 root root4096 Jul 30 02:06 tasks
[root@TEST ~]# cd winne
[root@TEST winne]# ll
total 2868
-rw-r--r-- 1 root root 1566968 Sep 23 08:53 20070716171657126.pdf
-rw-r--r-- 1 root root2397 Sep 23 08:53 Cosmic Ride - BeFour.lrc
-rw-r--r-- 1 root root 1354300 Sep 23 08:53 svnbook.pdf
四、user1修改文件並提交
[root@TEST winne]# vi testsvn.txt
[root@TEST winne]# svn add testsvn.txt //將testsvn.txt添加到庫中
Atestsvn.txt
[root@TEST winne]# svn commit -m "test" testsvn.txt //註釋爲test
Adding testsvn.txt
Transmitting file data .
Committed revision 2. //版本更新爲2了
五、user2回window客戶端更新版本
回到Windows的客戶端看日誌, 版本已經更新爲2了,註釋test,客戶端update就能夠更新到新的版本了.
六、Windows客戶端的版本回滾
選中菜單中的update to verisiom ,選擇版本1便可.
七、Linux版本回滾操做:
[root@TEST winne]# svn up -r 1
結束.
subversion 中文手冊:http://svndoc.iusesvn.com/