1. 程式人生 > >【Centos】搭建 SVN 伺服器

【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 。