(1).安裝SVN
1)安裝SVN
[root@youxi1 ~]# yum -y install subversion mod_dav_svn [root@youxi1 ~]# cat /etc/services | grep svn svn 3690/tcp # Subversion //SVN的端口號。3690 svn 3690/udp # Subversion svnetworks 2973/tcp # SV Networks svnetworks 2973/udp # SV Networks svnet 3413/tcp # SpecView Networking svnet 3413/udp # SpecView Networking ml-svnet 4171/tcp # Maxlogic Supervisor Communication
2)創建目錄
[root@youxi1 ~]# mkdir /webdept //創建存放版本庫的主目錄 [root@youxi1 ~]# svnadmin create /webdept/www.youxi1.com //創建兩個版本庫 [root@youxi1 ~]# svnadmin create /webdept/www.test1.com
注意:svnadmin是由subversion軟件包提供。
查看版本庫內的文件和文件夾
[root@youxi1 ~]# ls /webdept/www.youxi1.com/ conf db format hooks locks README.txt
說明:conf目錄是這個版本倉庫的配置文件,存放訪問倉庫的用戶賬號、權限、密碼等
db目錄是所有版本控制的數據存放目錄
format文件是存放當前庫配置版本號的文本文件,是一個正整數
hooks目錄是放置hook腳本文件的目錄
locks目錄是放置subversion監控鎖定數據的目錄,用於追蹤存取文件庫的客戶端
查看conf目錄下的文件
[root@youxi1 ~]# ls /webdept/www.youxi1.com/conf/ authz passwd svnserve.conf
說明:authz認證權限相關
passwd用戶名和密碼
svnserve.conf服務器配置文件
3)修改服務器配置文件
[root@youxi1 ~]# vim /webdept/www.youxi1.com/conf/svnserve.conf anon-access = read//第19行,匿名可讀 auth-access = write//第20行,認證可寫 password-db = passwd//第27行,啟用密碼文件,默認同一目錄下的passwd文件 authz-db = authz//第34行,啟用認證文件,默認同一目錄下的authz文件 realm = www.youxi1.com//第39行,登錄提示信息
注意:此配置文件內,啟用的參數開頭不能存在空格
4)編輯用戶密碼文件
[root@youxi1 ~]# vim /webdept/www.youxi1.com/conf/passwd admin = 123456 //在[user]模塊下編輯 user = 123456 user2 = 123456
5)編輯認證權限文件
[root@youxi1 ~]# vim /webdept/www.youxi1.com/conf/authz //在[groups]模塊下編輯 user_group = user,user2 //[組名] = [用戶名,用戶名,...] [/] [] admin=rw //[用戶名] = [權限];指定用戶的權限 @user_group = r //@[組名] = [權限];指定組內的用戶權限 * = //* = [權限];其他用戶的權限,如果權限為空則無權
6)啟動SVN
[root@youxi1 ~]# svnserve -d -r /webdept/ [root@youxi1 ~]# ps aux | grep svn //查看進程 root 1912 0.0 0.0 180716 800 ? Ss 14:41 0:00 svnserve -d -r /webdept/ root 1915 0.0 0.0 112720 984 pts/0 S+ 14:42 0:00 grep --color=auto svn [root@youxi1 ~]# ss -antup | grep svn //查看端口號 tcp LISTEN 0 7 *:3690 *:* users:(("svnserve",pid=1912,fd=3))
-d是daemon的意思,即守護進程。
-r /webdept/是啟動了所有版本庫,如果只想啟動其中一個可以指定詳細地址,例如/webdept/www.youxi1.com/。
7)如果沒有關閉防火牆,並且不打算使用Apache+SVN,那么請將3690添加到防火牆規則
[root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port=3690/tcp success [root@youxi1 ~]# firewall-cmd --reload success [root@youxi1 ~]# firewall-cmd --permanent --zone=public --list-ports 3690/tcp
8)添加開機自啟
[root@youxi1 ~]# echo "svnserve -d -r /webdept/" >> /etc/rc.local
[root@youxi1 ~]# chmod +x /etc/rc.d/rc.local
(2).svn常見使用方法
svn [子命令] [選項] [args] 這是常規使用方法。
svn help [子命令] 查看子命令的使用方法,子命令有哪些選項等。如果不跟隨子命令則顯示所有子命令
svn --version 查看程序的版本號和版本庫訪問模塊。
svn --version --quiet 只查看程序的版本號。
1)常用的子命令
import 將未版本化的文件納入版本控制並提交 checkout 從版本庫中檢出一個修訂版 update 更新工作拷貝 add,delete,copy,move 增、刪、復制、移動文件或目錄 status 檢查狀態差異 diff 檢查文件行級詳細差異 revert 恢復 resolve 解決沖突 switch 切換工作拷貝對應的版本庫分支 log 查看歷史記錄 list 顯示文件目錄 cat 查看某個文件內容
2)實例
導入:svn import [本地路徑] [URL] [選項];其中URL可以是svn://[服務器IP地址]/[項目名],也可以是file://[絕對路徑],前者從SVN服務器導入,后者從本地導入。
[root@youxi1 ~]# mkdir test/ [root@youxi1 ~]# touch test/{1,2}.html [root@youxi1 ~]# svn import /root/test/ file:///webdept/www.youxi1.com/ -m "firest" //-m類似注釋 正在增加 test/1.html 正在增加 test/2.html 提交后的版本為 1。
獲取:svn checkout [URL] [本地路徑];這里的URL一般是svn://[服務器IP地址]/項目名。只有第一次獲取項目時使用checkout,后期使用的是update更新。
[root@youxi1 ~]# mkdir test2 [root@youxi1 ~]# svn checkout svn://192.168.5.101/www.youxi1.com/ test2/ 認證領域: <svn://192.168.5.101:3690> www.youxi1.com “root”的密碼: //直接回車<Enter>切換賬號 認證領域: <svn://192.168.5.101:3690> www.youxi1.com 用戶名: admin //輸入用戶名 “admin”的密碼: //輸入密碼 ----------------------------------------------------------------------- 注意! 你的密碼,對於認證域: <svn://192.168.5.101:3690> www.youxi1.com 只能明文保存在磁盤上! 如果可能的話,請考慮配置你的系統,讓 Subversion 可以保存加密后的密碼。請參閱文檔以獲得詳細信息。 你可以通過在“/root/.subversion/servers”中設置選項“store-plaintext-passwords”為“yes”或“no”, 來避免再次出現此警告。 ----------------------------------------------------------------------- 保存未加密的密碼(yes/no)?no //no,不保存 A test2/1.html A test2/2.html 取出版本 1。
添加和提交:svn add [新增的文件或文件夾];svn commit [選項];提交必須到工作副本下,也就是checkout下載到的本地路徑下
[root@youxi1 ~]# touch test2/3.html //本地創建 [root@youxi1 ~]# svn add test2/3.html //添加到SVN緩存中 A test2/3.html [root@youxi1 ~]# svn commit -m "second" //需要移動到下載目錄下 svn: E155007: “/root”不是工作副本 [root@youxi1 ~]# cd test2/ [root@youxi1 test2]# svn commit -m "second" //提交SVN緩存 認證領域: <svn://192.168.5.101:3690> www.youxi1.com “admin”的密碼: ----------------------------------------------------------------------- 注意! 你的密碼,對於認證域: <svn://192.168.5.101:3690> www.youxi1.com 只能明文保存在磁盤上! 如果可能的話,請考慮配置你的系統,讓 Subversion 可以保存加密后的密碼。請參閱文檔以獲得詳細信息。 你可以通過在“/root/.subversion/servers”中設置選項“store-plaintext-passwords”為“yes”或“no”, 來避免再次出現此警告。 ----------------------------------------------------------------------- 保存未加密的密碼(yes/no)?no 正在增加 3.html 傳輸文件數據. 提交后的版本為 2。
注意1:checkout導出獲得文件后,導出的文件仍處於SVN版本控制中,與版本庫保持關聯。checkout是第一次用,后面的用法就是更新。
注意2:add向拷貝文件所在的文件夾中添加新的文件,並作標識,是新添加的。提交后該文件才會存儲到中央項目倉庫。
(3).SVN+Apache
1)在上面的基礎上,安裝httpd
[root@youxi1 ~]# yum -y install httpd
2)查看apache對SVN是否支持,以及兩個動態庫是否存在
[root@youxi1 ~]# vim /etc/httpd/conf.modules.d/10-subversion.conf LoadModule dav_svn_module modules/mod_dav_svn.so //如果存在這兩行,代表apache對SVN是支持的 LoadModule authz_svn_module modules/mod_authz_svn.so LoadModule dontdothat_module modules/mod_dontdothat.so [root@youxi1 ~]# ls /etc/httpd/modules/{mod_dav_svn.so,mod_authz_svn.so} /etc/httpd/modules/mod_authz_svn.so /etc/httpd/modules/mod_dav_svn.so //兩個動態庫也是存在的
3)配置Apache
[root@youxi1 ~]# vim /etc/httpd/conf.d/subversion.conf <Location /webdept> DAV svn SVNParentPath /webdept //SVN根目錄 AuthType Basic //BAsic認證方式 AuthName "www.youxi1.com web type" //提示信息 AuthUserFile /webdept/svn/passwd //Apache登錄的用戶名和密碼 AuthzSVNAccessFile /webdept/svn/authz //Apache用戶登錄的訪問權限 Require valid-user //不允許匿名用戶 </LOcation>
也可以直接寫入/etc/httpd/conf/httpd.conf配置文件,這個文件里調用了/etc/httpd/conf.d/目錄下的.conf文件。
4)創建用戶密碼文件和用戶訪問權限文件
創建用戶密碼文件
[root@youxi1 ~]# htpasswd -c /webdept/svn/passwd apacheuser1 //-c創建文件 New password: Re-type new password: Adding password for user apacheuser1 [root@youxi1 ~]# htpasswd /webdept/svn/passwd apacheuser2 //不能有-c,否則會覆蓋文件 New password: Re-type new password: Adding password for user apacheuser2 [root@youxi1 ~]# htpasswd /webdept/svn/passwd apacheuser3 New password: Re-type new password: Adding password for user apacheuser3 [root@youxi1 ~]# cat /webdept/svn/passwd apacheuser1:$apr1$uTlyJF5s$yz5fRFK2PZGIzAwmERdq4. apacheuser2:$apr1$jTNZIcSi$NVwEHIigLHFBmX4osrBiq/ apacheuser3:$apr1$T81c.kp5$JMPzf/R5O1I0W7JZNNUIK1
創建用戶訪問權限文件
[root@youxi1 ~]# vim /webdept/svn/authz [groups] group_name = apacheuser1,apacheuser2 //設置組 [/] //SVN根目錄 apacheuser1 = rw [www.youxi1.com:/] //第一個倉庫 @group_name = rw //組權限 [www.test1.com:/] //第二個倉庫 apacheuser2 = rw //單用戶權限 apacheuser3 = rw
5)重啟httpd,如果防火牆是開啟狀態,請添加防火牆端口規則
[root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp success [root@youxi1 ~]# firewall-cmd --reload success [root@youxi1 ~]# firewall-cmd --permanent --zone=public --list-ports 3690/tcp 80/tcp [root@youxi1 ~]# systemctl restart httpd.service
6)測試
(4).SVN遠程連接中央項目倉庫時,Windows下注意點
1)checkout
這個URL可以是svn://[服務器IP地址]/[項目名],也可以是http://[IP地址]/[根目錄]/[項目名]。注意:svn://要用svn的用戶密碼(我這里就是/webdept/www.youxi1.com/conf/passwd);http://要用http的用戶密碼(我這里就是/webdept/svn/passwd)
2)小圖標不顯示
工作區右鍵-->TortoiseSVN-->Settings-->Icon Overlays中Status cache選擇Shell;Drive Types選擇Fixed drives。Icon Set選擇與系統匹配的選項。最后注銷重新登錄。
3)提交
右鍵新加的文件或文件夾-->TortoiseSVN-->Add。刷新后文件應該出現一個加號。
右鍵新加的文件或文件夾-->SVN Commit。文件的加號變為勾。
(5).SVN和Git的比較