【Centos】搭建 SVN 伺服器
1、如果僅僅只是搭建 svn 伺服器:
(a)、先檢查 svn 是否已經安裝了
rpm -qa subversion #輸入這個命令後,會出現 subversion 版本號
(b)、如果沒有安裝,使用下面命令:
yum install subversion [-y] #這個 -y 命令,是表示在找到包之後,是否自動 選擇 y,全自動。如果沒有,在找到包之後,會詢問 y / n
(c)、安裝 完成後 使用下面命令 檢視版本:
svnserve --version #檢視版本號,是 -- 不是 - 這個是要注意的
2、建立 svn 根目錄,下面的命令的意思是 在 /home 資料夾中 建立 svn 資料夾:
(a)、mkdir 是 linux 下建立資料夾的命令
mkdir /home/svn #是 /home/ 下建立 svn 目錄,這個是動態的,看自己喜歡建立在哪裡, svn 是多版本庫的根目錄。
mkdir /home/svn/test #這裡建立一個 test 的目錄,進行一個版本庫的存放
3、建立 使用下面命令 建立版本庫:
(a)、使用上面命令後,會生成幾個 檔案 和 資料夾,網上經常看到 ls -l 只是列出 資料夾 和 檔案 列表,並不是建立。
(b)、資料夾 ---- conf、db、hooks、locks
(c)、檔案 ---- format、README.txt
(d)、目錄結構的 描述,請跳轉到最下面。
svnadmin create [path] #這裡填寫的是資料夾路徑,如果是當前目錄 寫 ./ 不能省略,我這裡建立的是一個 test 路徑的
4、ls -l 之後,出現的資訊圖解:
5、接下來是配置一個版本庫的許可權 和 賬號密碼:
(a)、我們先切換到 上面成功的目錄下 的 conf 資料夾中
(b)、主要修改 三個檔案:authz ---- 是許可權 配置檔案、passwd ---- 是配置 訪問 使用者 的 賬號和密碼、svnserve.conf 是總配置檔案
5.1、我在這裡先修改 passwd 檔案
(a)、使用 vi / vim passwd 開啟檔案,在圖形介面中,可以使用 gedit。
(b)、在 vi / vim 命令下,使用編輯 按 i 進入編輯模式。
(c)、Ctrl + c 是 切換成命令狀態,:wq 是 儲存並退出,如果不儲存就退出 使用 :q!。如果修改過了 不能直接用 :q 退出。
# 在 [users] 下面寫 訪問的賬號和密碼,寫法是 賬號 = 密碼
# 例如下面:
[users]
test = 123456 # 這是第一個賬號和密碼
test1 = 123456 # 這是第二個賬號和密碼
5.2、修改 authz 許可權檔案:
# 我們可以直接 賦值 使用者的許可權,帶許可權的寫法,應該寫在 [<版本庫名>:<路徑>] 下面,代表那個路徑,那些使用者有許可權。
test = rw # 這裡的 test 是在 passwd 檔案中定義的使用者,rw 代表 讀和寫的許可權。
#如果 有很多 賬號,這個時候,就需要分組了,在 [group] 下寫
[group]
vip = test, test1 # 這裡表示,建立一個 分組叫 vip,使用的時候通過 @vip 使用。
# 在 authz 檔案最下面
# [<版本庫名>:<路徑>]
# 1、下面的表示 版本庫的根目錄下,只有 admin 這個角色才有 rw 許可權
[/] # 這個 / 根目錄 是隻 svnserve 啟動時候,指定的根目錄。
@admin = rw # 這裡的 admin 是 上面 group 下的分組,不是系統自帶的,表示 admin 分組中的使用者,都有 讀寫許可權
#我上面只定義了 一個 vip 使用者組,所以只能 是 vip,admin 這個使用者組錯誤的。
5.3、配置 svnserve.conf,修改 了 svnserve.conf 這個檔案後是需要重啟 svn 服務的,而修改上面 的 passwd 和 authz 檔案是不需要重啟的:
#需要修改的,基本只有5條,這5條原本是本註釋掉的。 #write 是可讀可寫,read 是隻讀,none 是無訪問許可權 [general] #控制非鑑權使用者訪問版本庫的許可權。 anon-access=none #匿名訪問的許可權,可以是 read, write,none,預設是 read # 控制鑑權使用者訪問版本庫的許可權 auth-access=write #使用授權使用者有寫的許可權 預設是 write #指定使用者賬號和密碼的檔名,用法 與 下面的 authz 一樣. password-db=passwd #使用者資料庫的路徑 #指定許可權配置檔名,通過該檔案可以實現以路徑為基礎的訪問控制。 除非指定絕對路徑,否則檔案位置為相對conf目錄的相對路徑。 預設值:authz authz-db=authz #訪問控制檔案路徑 #指定版本庫的認證域,即在登入時提示的認證域名稱。若兩個版本庫的 認證域相同,建議使用相同的使用者名稱口令資料檔案. realm=fist....
6、先殺死 svn 服務,再重啟:
killall svnserve #關閉所有 svn 服務
7、以多庫方式 啟動 svnserve 服務:
svnserve -d -r /home/svn [--listen-port 埠號]
#上面提到,test 是我們測試用的版本庫,然後,我們以多庫方式啟動 svn 後,test 版本庫的路徑就是 svn://127.0.0.1/test
#-d 是表示守護執行緒後臺執行
#-r 表示一定目錄
#--listen-port 是表示監聽的埠號,可選,預設是 3690
Ps:
(1)、這裡需要新手去看,否則很容易浪費時間,菜鳥教程地址:http://www.runoob.com/svn/svn-start-mode.html
(2)、由於 -r 的配置方式不一樣,svn 啟動 區分兩種模式
(3)、第一種: -r 直接指定到版本庫(稱為 單庫 svnserve 方式)
例如這篇文章的例子: -r /home/svn/test 我啟動的時候 在這裡直接指定到了 test 這個目錄下
authz 配置的時候,[/] 直接表示 test 這個根目錄。
客戶端訪問的時候的 URL: svn://127.0.0.1/ 即可訪問到 test 版本庫
(4)、第二種: -r 指定到版本庫的上級目錄(稱為 多庫 svnserve 方式)
多庫啟動 -r /home/svn
這個時候的 authz 配置的寫法就不用了,應該成 [<版本庫名>:/] 這樣的。
客戶端訪問的URL: svn://127.0.0.1/test 才可以訪問 到版本庫 test
8、配置完成後,可以在本地 使用 命令,檢視是否啟用成功:
svn co svn://127.0.0.1/[版本庫]
9、有些伺服器,需要關閉防火牆: centos 7 預設防火牆:filewalld 文件:https://blog.csdn.net/wangmx1993328/article/details/80738012
10、有些伺服器關閉了防火牆之後,還是拒絕訪問的,再啟動一次執行一次 svnserve -dr [路徑] 試試
svn客戶端:
(1)、修改配置檔案,使下次登入時不記錄密碼
windows環境,在開始選單->執行輸入:%appdata%/subversion,找到config檔案【反正自己找到即可】;
unix/linux環境,編輯~/.subversion/config檔案。這個試過可以的。
分別對以下兩行取消註釋、然後儲存退出;
# store-passwords = no
# store-auth-creds = no
(2)、刪除認證快取設定
windows環境,刪除:%appdata%/subversion/auth
unix/linux環境執行:rm -rf ~/.subversion/auth
搭建 http 伺服器訪問:
1、先安裝 apache 服務
#apache伺服器,讓我們的svn 伺服器支援http協議訪問,而不僅是svn://協議
yum install -y httpd
#apache操作svn模組
yum install -y mod_dav_svn
2、修改配置檔案 /etc/httpd/conf.d/subversion.conf(沒有則新建),內容為: 不如不行,參考:http://room-bb.iteye.com/blog/2293178
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNListParentPath on
SVNPath /home/svn/test #只支援一個主目錄的SVN版本庫
SVNParentPath /home/svn/ #支援多個相同父目錄的SVN版本庫
AuthType Basic
Satisfy Any
AuthName "Subversion repos"
AuthUserFile /home/svn/conf/accesspwd
AuthzSVNAccessFile /home/svn/conf/authz
Require valid-user
</Location>
3、建立 accesspwd 檔案:
htpasswd -c -m /home/svn/conf/accesspwd root # 在/home/svn/conf 下面建立一個叫 accesspwd 的檔案 , root 的使用者名稱
4、設定 許可權 目錄
chown -R apache:apache /home/svn/
搭建 websvn :
1、因為 websvn 是 php 寫的,所以要安裝 php
yum install -y php
2、下載 websvn 到 /var/www/html 目錄下面
cd /var/www/html # 切換到 /var/www/html 目錄
wget http://websvn.tigris.org/files/documents/1380/49057/websvn-2.3.3.zip #下載 websvn 包
3、解壓 websvn 包
unzip websvn-2.3.3.zip #解壓 websvn 包
mv websvn-2.3.3 websvn #把 websvn-2.3.3 移動到 websvn 資料夾中
4、配置 檔案:
cd /var/www/html/websvn/include #切換到 /var/www/html/websvn/include 目錄 cp distconfig.php config.php #複製 disptcofig.php 檔案內容到 config.php vi config.php
#修改的配置如下面:
# 1、這下面的基本是註釋掉,並且修改好路徑就行了,路徑按下面例子填寫就好了。
// Configure these lines if your commands aren't on your path.
//
$config->setSVNCommandPath('/usr/bin');// e.g. c:\\program files\\subversion\\bin
$config->setDiffPath('/usr/bin');
// For syntax colouring, if option enabled...
$config->setEnscriptPath('/usr/bin');
$config->setSedPath('/bin');
// For delivered tarballs, if option enabled...
$config->setTarPath('/bin');
// For delivered GZIP'd files and tarballs, if option enabled...
$config->setGZipPath('/bin');
$config->parentPath('[svn檔案路徑]'); #這個是單一版本庫的
$config->parentPath('[svn檔案路徑]', 'group'); #這個是多庫的
#3、下面這些直接複製貼上到 $config->parentPath('/svn/'); 下面就行了
$extEnscript[".pl"]="perl";
$extEnscript[".py"]="python";
$extEnscript[".sql"]="sql";
$extEnscript[".java"]="java";
$extEnscript[".html"]="html";
$extEnscript[".xml"]="html";
$extEnscript[".thtml"]="html";
$extEnscript[".tpl"]="html";
$extEnscript[".sh"]="bash";
5、重啟 httpd 服務
systemctl restart httpd.service
6、在瀏覽器中開啟,輸入URL: http:// IP地址/websvn
7、如果遇到 Unable to find "enscript" tool at location "/usr/bin/enscript 這樣的問題,安裝一下 enscript 就能修復了。
yum install enscript
注意:linux 上 svn 用瀏覽器開啟的介面都比較醜,如果想要下面的,需要 在 windows 系統上,搭建 VisualSVN server 。