官網下載: http://subversion.apache.org/packages.html
SVN客戶端:TortoiseSVN :https://tortoisesvn.net/downloads.html
查看系統下有沒有安裝過老版本的svn:rpm -qa subversion,如果沒安裝過則什么都不顯示

如果有老版本先運行一下yum -y remove subversion,刪除老版本。


第一步:通過yum命令安裝svnserve,命令:yum -y install subversion
此命令會全自動安裝svn服務器相關服務和依賴,安裝完成會自動停止命令運行


若需查看svn安裝位置,可以用命令:rpm -ql subversion

第二步:創建版本庫目錄(此僅為目錄,為后面創建版本庫提供存放位置,subversion默認是把/var/svn作為數據根目錄的,開機啟動默認也是從這里):mkdir /var/svn/svnrepos

第三步:創建svn版本庫
在第二步建立的路徑基礎上,創建版本庫:svnadmin create /var/svn/test(test為目錄(項目或版本庫)名稱,后面checkout項目時會用到。)

創建成功后,進入test目錄下,可以看見如下文件信息:cd /var/svn/test
conf:是這個倉庫配置文件(倉庫用戶訪問賬戶,權限)
format:是一個文本文件,里邊只放了一個整數,表示當前文件庫配置的版本號
hooks:放置hook腳步文件的目錄
locks:用來放置subversion的db鎖文件和db_logs鎖文件的目錄,用來追蹤存取文件庫的客戶端

第四步:配置修改
進入conf,conf目錄下,一共存放三份重要的配置文件,如下:

authz:負責賬號權限的管理,控制賬號是否讀寫權限
passwd:負責賬號和密碼的用戶名單管理
svnserve.conf:svn服務器配置文件
修改svnserve.conf:vim svnserve.conf

原始文件內容,都被注釋掉的,我們只需要去掉指定內容前注釋即可,如下:
[general]
anon-access = none #控制非鑒權用戶訪問版本庫的權限
auth-access = write #控制鑒權用戶訪問版本庫的權限
password-db = passwd #指定用戶名口令文件名,即訪問時要輸用戶名和密碼
realm = test #指定版本庫的認證域,即在登錄時提示的認證域名稱,改成自己的版本庫




修改authz文件信息:vim authz

在文件內容的末尾,添加如下:
rw表示賦予此賬號可讀寫的權限,r為讀,w為寫,注意[/]中的斜杠,這里如果斜杠反了,authz-db = authz 一直會提示“認證失敗”
第一種方式:單個添加:
# 按賬號分權限
[test/]
admin = rw
test = r

第二種方式(后面采用此方式配置):用戶分組,再設權限
[groups]
# 按用戶組分權限
admin = admin,admin1 # admin為用戶組,等號之后的為用戶
test = test1, test2 # test為用戶組,等號之后的為用戶
[/] # 表示svn倉庫目錄(/var/svn/test),test: 對應前面配置的realm = test
@admin = rw # 表示admin組對倉庫(/var/svn/test)目錄有讀寫權限,r為讀,w為寫
@test = r # 表示test組的用戶對對倉庫(/var/svn/test)目錄只有讀的權限
[/test1] # 表示test1目錄(/var/svn/test/test1)
@test = rw # 表示test組對test1目錄有讀寫權限
* =

備注:版本庫的目錄格式如下:
[<版本庫>:/項目/目錄]
@<用戶組名> = 權限
<用戶名> = 權限
其中[]內容有許多寫法:
[/],表示根目錄及其一下的路徑,根目錄是svnserver啟動時指定好的,上述實例中我們指定為:/svn/svndata([/]=/svn/svndata).[/]就是表示對全部版本設置的權限
[test:/],表示對版本庫test設置權限;
[test:/svnadmin],表示對版本庫test中的svnadmin項目設置權限;
[test:/svnadmin/second],表示對版本庫test中的svnadmin項目的目錄設置權限;
權限的主體可以是用戶組,用戶或者*,用戶組在前面要以@開頭,*表示全部用戶
權限分為:r ,w, rw和null ,null空表示沒有任何權限。
auhtz配置文件中的每個參數,開頭不能有空格,對於組要以@開頭,用戶不需要。
修改passwd文件信息:vim passwd

直接將賬號和密碼信息追加到文件中即可,格式為:賬號 = 密碼,這里上面如果是設的分組,仍需設置每個角色對應的密碼
例如:admin = 123@qwe

到此,配置已經全部完成,賬號信息已經添加成功
更改svnserver.conf時需要重啟SVN服務才生效,更改authz,passwd文件時則不需要重啟服務
第五步:防火牆開啟
多數情況下服務器安裝完成,配置完成后,無法連接svn服務器,均是防火牆問題
配置防火牆端口
首先要明確CentOS7的默認防火牆為firewallD。subversion的默認端口為3690,如果沒有打開會報錯:
1: sudo firewall-cmd --permanent --add-service=telnet
2: sudo firewall-cmd --permanent --add-port=3690/tcp
3: sudo firewall-cmd --reload
centOS 7 防火牆開啟、關閉與查看狀態:
systemctl start firewalld
systemctl stop firewalld
systemctl status firewalld
出現以下情況則代表防火牆沒啟動用systemctl status firewalld查看防火牆狀態

啟動防火牆

配置

六:啟動svn服務器
# -d : 守護進程 -r : svn數據根目錄
svnserve -dr /var/svn #用root權限啟動
查看SVN服務:
ps aux|grep svnserve #默認端口為:3690

設置開機啟動
在centos7, 設置開機啟動:
sudo systemctl enable svnserve.service #注意:根目錄必須是/var/svn 這樣才能設置成功!!

設置開機啟動后就可以按下面的方式開啟或停止服務了
systemctl start svnserve.service
systemctl stop svnserve.service
7:檢出項目
進入windows 檢出項目 地址欄輸入 svn://項目ip:3690/test
項目ip可以通過 ip addr 或者 ifconfig 查看 inet,test 為當初建立的SVN版本庫 可以從上文尋找


注釋掉:authz-db = authz

再次檢出(admin,有讀寫權限)


在檢出目錄下新建個文檔提交,成功


清除SVN記錄的賬號信息:SVN設置_已保存數據_清除

如果報這樣的錯:svn: E204900: Can't open file '/var/svn/wangwa/format': Permission denied的錯誤。那就是與SELinux有關系,這里有兩種處理方式:
1、把SELinux關閉
臨時關閉:sudo setenforce 0
永久關閉:sudo vim /etc/sysconfig/selinux
修改:SELINUX = disable #值修改為disable.
2、svn與SElinux的設置(未測試)
[root@localhost root]# chcon -R --reference=/var/svn /var/svn
[root@localhost root]# restorecon -v -R /var/svn
異常及解決:
如果提示:svnserve: Root path '/var/svn' does not exist or is not a directory.目錄不存在
修改etc/sysconfig/svnserve配置文件將OPTIONS="-r /var/svn"改成自己的svndata目錄 如"-r/svndata/test"
如果提示:svnserve: E000098: Can't bind server socket: Address already in use 端口被占用
先用命令 >netstat -ntlp列出所有端口占用情況,找到端口3690的PID,結束掉些進程: kill PID號;再啟動
