SVN是一種版本管理系統,前身是CVS,是開源軟件的基石。即使在溝通充分的情況下,多人維護同一份源代碼的一定也會出現混亂的情況,版本管理系統就是為了解決這些問題。SVN中的一些概念 : a. repository(源代碼庫) 源代碼統一存放的地方 b. Checkout (提取) 當你手上沒有源代碼的時候,你需要從repository checkout一份 c. Commit (提交) 當你已經修改了代碼,你就需要Commit到repository d. Update (更新) 當你已經Checkout了一份源代碼, Update一下你就可以和Repository上的源代碼同步,你手上的代碼就會有最新的變更日常開發過程其實就是這樣的(假設你已經Checkout並且已經工作了幾天):Update(獲得最新的代碼) -->作出自己的修改並調試成功 --> Commit(大家就可以看到你的修改了) 如果兩個程序員同時修改了同一個文件呢?SVN可以Merge這兩個程序員的改動,對,合並,實際上SVN管理源代碼是 以行為單位的,就是說兩個程序員只要不是修改了同一行程序,SVN都會自動合並兩種修改。如果是同一行呢,SVN會提示文件Confict, 沖突,需要手動確認。 TortoiseSVN簡介 TortoiseSVN 是 Subversion 版本控制系統的一個免費開源客戶端,可以超越時間的管理文件和目錄。文件保存在中央版本庫,除了能記住文件和目錄的每次修改以外,版本庫非常像普通的文件 服務器。你可以將文件恢復到過去的版本,並且可以通過檢查歷史知道數據做了哪些修改,誰做的修改。這就是為什麼許多人將 Subversion 和版本控制系統看作一種“時間機器”。
SVN的配置 1,配置好yum,檢查subversion安裝包 [root@svn ~]# yum list |grep subversion subversion.i386 1.4.2-4.el5_3.1 base subversion-devel.i386 1.4.2-4.el5_3.1 base
subversion-javahl.i386 1.4.2-4.el5_3.1 base
subversion-perl.i386 1.4.2-4.el5_3.1 base
subversion-ruby.i386 1.4.2-4.el5_3.1 base
[root@svn ~]# yum -y install subversion 測試安裝是否成功:
svnserve --version 回車顯示版本說明安裝成功
[root@svn ~]# netstat –nat 查看默認TCP 3690端口是否監聽.
2,創建svn版本庫 [root@svn /]# mkdir -p /data/svndata [root@svn /]# svnadmin create /data/svndata/winne winne為版本庫名稱
3,svnserve配置文件概述 svnserve.conf -- svn服務配置文件,該文件版本庫目錄的conf目錄下。 passwd -- 用戶名口令文件,該文件名在文件svnserve.conf中指定,缺省為同目錄下的。 authz -- 權限配置文件,該文件名也在文件svnserve.conf中指定,缺省為同目錄下的。
conf/svnserve.conf 文件 配置項分為以下5項: anon-access 控制非鑒權用戶訪問版本庫的權限。 auth-access 控制鑒權用戶訪問版本庫的權限。 password-db 指定用戶名口令文件名。 authz-db 指定權限配置文件名,通過該文件可以實現以路徑為基礎的訪問控制。 realm 指定版本庫的認證域,即在登錄時提示的認證域名稱。若兩個版本庫的 認證域相同,建議使用相同的用戶名口令數據文件
注:1.4版本anon-access = read 參數的bug . anon-access = read時 客戶端Checkout(提取)的時候會有Not authorized to open root of edit operation"錯誤,改為none參數正常, conf /Passwd 文件 user1 = user1 user2 = user2
conf /authz 文件 [groups] 設置組 admin = user1 [/] 根目錄權限設置(就是“svndata”這個文件夾) user1 = rw 用戶1權限是:可讀寫 user2 = r 用戶2權限是:可讀,不可寫 @admin = rw 設置組權限 [svndata:/winne] 設置根目錄下“winne”文件夾的權限 user1 = rw user2 = r …以此類推
4,啟動和停止SVN服務 啟動SVN服務: [root@svn ~]# svnserve -d -r /data/svndata/ -d表示後台運行 -r 指定根目錄是 /data/svndata/ 停止SVN服務: ps -aux |grep svn kill -9 進程殺掉
客戶端使用Windows客戶端TortoiseSVN的使用 1, TortoiseSVN 客戶端的安裝
測試選擇的是TortoiseSVN 1.6.5客戶端 付中文漢化包.
2,客戶端的文件更新至服務器(user1操作) 新建一個空目錄,右鍵Checkout (提取) svn://192.168.103.26/winne 輸入passwd文件中的授權用戶帳號就可以了
在目錄中加入一些文件測試. 然後在空白地方右鍵點TortoiseSVN-> ADD 添加列表到服務器端.此時並沒有真正拷貝到服務器上,需再在Commit(提交)操作才會拷貝
在版本庫浏覽器中就可以看到剛才提交的文件了,此時提交的版本為1.
3,客戶端在服務器上拉讀取數據(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(更新版本) 1,SVN的安裝 yun –y install subversion 2,Linux svn的常用命令 ()內為命令簡寫. checkout (co) 提取 commit (ci) 提交 update (up) 更新 list (ls) 列表
3, checkout (co) 提取 svn服務器上的文件 (user1)操作流程 [root@TEST ~]# svn co svn://192.168.103.26/winne Authentication realm: My First Repository Password for 'root':
Authentication realm: 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 root 4096 Sep 23 09:02 winne /winne目錄是SVN自動生成的 drwxr-xr-x 2 root root 4096 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 root 2397 Sep 23 08:53 Cosmic Ride - BeFour.lrc -rw-r--r-- 1 root root 1354300 Sep 23 08:53 svnbook.pdf
4,user1修改文件並提交 [root@TEST winne]# vi testsvn.txt [root@TEST winne]# svn add testsvn.txt /將testsvn.txt添加到庫中 A testsvn.txt [root@TEST winne]# svn commit -m "test" testsvn.txt /注釋為test Adding testsvn.txt Transmitting file data . Committed revision 2. /版本更新為2了
5,user2回window客戶端更新版本 回到Windows的客戶端看日志, 版本已經更新為2了,注釋test,客戶端update就可以更新到新的版本了.
6, Windows客戶端的版本回滾 選中菜單中的update to verisiom ,選擇版本1即可.
7,Linux版本回滾操作: [root@TEST winne]# svn up -r 1