linux下svn服務器搭建及使用(包含圖解)

  今天自己動手在linux搭建了svn服務器,把具體過程和一些自己的見解分享給大家,希望對大家有所幫助。
  客戶端svn(大家見到的小烏龜)下載地址爲:http://tortoisesvn.net/downloads.html。這裏客戶端的安裝就不作詳解了,接下來直接進入服務端的安裝~

  • 1)安裝svn服務器
# yum install subversion

這裏寫圖片描述

  • 2)創建一個目錄用來存放所有的svn版本庫(後期客戶端更新時,有優勢,後面會提到)
# mkdir /svn

這裏寫圖片描述

  • 3)在svn目錄下創建一個版本庫 repositoryA
# svnadmin create /svn/repositoryA

這裏寫圖片描述

  • 4)查看並分析生成的文件
# ls /svn/repositoryA

這裏寫圖片描述

conf目錄:版本庫的配置文件,包含用戶訪問賬號、權限等
db目錄:存放數據
format文件:是一個文本文件,裏面只放了一個整數,表示當前文件庫配置的版本號(可以用vi打開看一下)
hooks目錄:放置hook腳本文件的目錄
locks目錄:用來放置subversion的db鎖文件和db_logs鎖文件的目錄,用來追蹤存取文件庫的客戶端
README.txt文件:說明文檔
  • 5)修改svnserve.conf 配置文件
# vi /svn/repositoryA/conf/svnserve.conf

這裏寫圖片描述
這裏寫圖片描述

打開並修改下面幾個註釋(或者直接添加,原來的註釋就不用打開)
[general]  # 如果是直接添加到最後面,不要忘記加這條,否則客戶端更新的時候會不用權限直接檢出,提交時又報沒權限
anon-access = none # 匿名不可讀寫,可以爲write,read,none,默認爲read,建議爲none
auth-access = write # 驗證用戶可讀寫
password-db = /svn/repositoryA/conf/passwd # 指向用戶名和密碼的數據文件,地址不要寫錯,不然會報authorization failed
authz-db = /svn/repositoryA/conf/authz # 指向用戶的權限配置文件,地址不要寫錯,不然會報authorization failed
realm = repositoryA         #客戶端檢出時,提示信息
保存退出:wq(我是linux小白,進入編輯後不會退出。。。 按Esc後,輸入 : ,再輸入wq即可)
  • 6)添加訪問用戶及密碼
# vi /svn/repositoryA/conf/passwd

這裏寫圖片描述
這裏寫圖片描述

testUser1 = 123456 # 前面是用戶名,後面是密碼
testUser2 = 123456 # 這裏建兩個用戶,爲了說明配置權限時,可以分組管理
保存退出: wq
  • 7)管理用戶權限
# vi /svn/repositoryA/conf/authz

這裏寫圖片描述
這裏寫圖片描述

[groups]
admin = testUser1,testUser2    # 可以通過一個變量管理多個權限一樣的用戶,用戶之簡用逗號“,”隔開
[/]                # 這裏 / 表示對根目錄(即/svn/ProjectA目錄)下的所有子目錄範圍設置權限;
@admin = rw                 # rw表示可讀寫, r表示只讀 
* =                         # 這一行很重要,表示除了上面設置的權限用戶組以外,其他所有用戶都設置空權限,


如果有多個groups,要先把用戶分組變量全部賦值,比如
admin = testUser1
art = testUser2
後面再分組給權限
[/]
@admin = rw
[/]
@art = rw

而不能將用戶分組變量分開寫
admin = testUser1
[/]
@admin = rw

art = testUser2
@art = rw

這樣檢出的時候會提示配置錯誤
  • 8)開啓svn服務
    到這裏,我們已經完成了svn服務端軟件的下載,創建了版本庫,並添加了用戶以及相應的權限,最後我們只要開啓svn服務即可。
    這這裏我們要考慮後期添加新的版本庫問題,這裏提供兩種方法開啓svn服務。

第一種: 直接開啓對應的版本庫,一個端口指向一個版本庫(默認svn對應的端口爲3690)

#svnserve -d -r /svn/repositoryA  

這裏寫圖片描述

這時重複2-7步,再添加一個版本庫repositoryB。這裏用

#svnserve -d -r /svn/repositoryB 

  開啓版本庫repositoryB時,會提示svnserve: Can’t bind server socket: Address already in use
因爲svn默認使用的端口是3690,而之前在開啓版本庫repositoryA已經使用,所以這裏提示已經使用
所以我們應該換個端口,這裏假設端口3691未被使用,則可以使用

#svnserve -d -r /svn/repositoryB --listen-port 3691

注意: 這時客戶端檢出時,只要指定端口,就能檢出對應的版本庫,因爲
svn://192.168.100.50:3690 對應 服務端的 /svn/repositoryA目錄
svn://192.168.100.50:3691 對應 服務端的 /svn/repositoryB目錄
(這裏192.168.100.50是服務端的ip,你們根據自己服務器信息填寫ip)

這裏寫圖片描述

第二種: 開啓版本庫所在的目錄(建議使用這種)

#svnserve -d -r /svn/

這時在客戶端檢出的時候,不用關心端口(默認3690),只要加入對應的版本庫名就可以了,因爲
svn://192.168.100.50:3690 對應 服務端的 /svn目錄

svn://xxx.xxx.xxx.xxx/repositoryA
svn://xxx.xxx.xxx.xxx/repositoryB

補充:這裏每個版本庫都用自己的配置,每增加一個版本庫就要重新配置一份,顯然不夠便捷,下次補充如何讓多個版本庫共用一份配置

svn 相關命令補充 :

  • 查看svn程序監聽的所有端口以及PID信息:
netstat -anp |grep svn
  • 查看svn進程信息:
ps -ef|grep svnserve
  • 殺死svn進程:(根據上面查看svn進程信息,根據進程ID殺死指定進程)
kill -9 PID
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章