CentOS7下搭建SVN服務器


(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的比較

SVN與Git比較的優缺點差異


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM