配置自己的Linux svnserve伺服器

2021-06-25 08:04:50 字數 4489 閱讀 2054

from:

通常,很多linux發行版已經自帶了svn軟體,安裝系統時候選擇即可。因此,本文並不講解如何安裝svn相關軟體,而是重點總結一下如果使用svnserve伺服器來構建自己的**倉庫,並且允許別人遠端訪問。

cu: godbach。

apr 6, 2009

一、新建並初始化版本庫

1.新建**倉庫

# svnadmin create /home/myrepos
這樣,我們就在/home目錄下新建了版本庫myrepos。
2.初始化**倉庫
#mkdir -p code/
按照svn手冊上的建議,我們版本庫的布局採用branches/tags/trunk這樣的三個目錄。

然後可以將**直接拷貝的trunk目錄,也可以隨後採用svn add的方式新增。

#svn import code file: ///home/myrepos
將我們構造好的版本庫布局(以及**,如果已經拷貝到trunk下的話)提交到版本庫。

由於這裡我們是在本地操作,因此可以直接使用file協議方式提交。

格式為:file:// + 版本庫絕對的路徑

ok,到這裡我們已經構建了乙個本地版本庫,可以再本地使用svn ci的方法得到版本庫

的副本了。如果前面只是提交了版本庫布局,而沒有提交**的話,則可以通過如下命

令,提交版本**:

#svn co file: ///home/myrepos/trunk repos
通常只從主線目錄trunk下取出原始碼,放在了新建的repos目錄。然後可以將原始碼拷貝

到repos目錄。

執行以下兩條命令將**新增的版本庫。
#svn add *
#svn ci * -m "committed codes"
首先需要將拷貝的**加入到當前的副本中,然後將**提交到版本庫。
二、配置並啟動svnserve
1. 配置svnserve
這一步主要完成遠端使用者訪問版本的許可權。
在版本庫目錄下有個conf目錄:home/myrepos/conf,該目錄包含三個檔案:

authz,passwd,svnserve.conf。

(1)svnserve.conf
此檔案重點的設定內容如下:
anon-access = read
auth-access = write
password-db = passwd
authz-db = authz
其中,anon-acces s和auth-access分別代表設定匿名使用者和授權使用者的訪問許可權。

read代表唯讀,write代表可讀可寫,還有乙個none,代表禁止訪問。如果不想讓匿名使用者

訪問的話,可以設定anon-access = none。

password-db為儲存版本庫的使用者名稱和密碼,通常為conf目錄下的passwd檔案。
authz-db指向的檔案,主要用於將使用者進行分組,並賦予不同的組不同的許可權。

譬如有多個目錄時,設定某個組的使用者只可以訪問其中的那些目錄。

(2)passwd
如前面介紹,這個檔案的主要內容如下
[users]
harry = harrysecret
sally = sallyssecret
以上兩行就是可以訪問版本庫的使用者名稱和密碼。格式為:user = passwd。
(3)authz
[groups]
# harry_and_sally = harry,sally
# [/foo/bar]
# harry = rw
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
以上就是authz檔案的格式。先給使用者分組,然後分別設定每個組的工作目錄以及許可權等。
本文的講解並未用到authz的配置。
2. 啟動svnserve
#svnserve -d -r /home/
svnserve將以守護程序的方式執行。同時,通過-r選項指定了版本庫的目錄。這個目錄可以

是版本庫的上級目錄(/home),也可以是版本庫的目錄(/home/myrepos)。具體的區

別會在後面講到。當然,也可以不用-r指定。

三、遠端訪問svnserve。
#svn checkout svn: myrepos
這樣版本庫的所有內容都被check出來,存放在當前目錄myrepos下。這裡相當於使用svn

協議,不用搭建http伺服器。

如果啟動svnserve的時候,-r選項指定的是版本庫的目錄,譬如/home/myrepos,那麼檢出

版本的時候,執行的命令為:

#svn checkout svn: myrepos
如果啟動svnserve是沒有指定-r選項,則要輸入版本庫的絕對路徑:
#svn checkout svn:home/myrepos myrepos
四、容易出現的問題

在訪問svnserve時,遇到了不少的問題,大致總結一下:

1. 這一步最容易避免,一定要記得啟動svnserve。

2. 記得要正確的修改配置檔案svnserve.conf和passwd。

3. 保證版本庫伺服器沒有配置限制遠端訪問svnserve的規則。有時在訪問svn伺服器的時候,會提示伺服器積極拒絕鏈結。簡單起見,可以看看iptables -l input和iptables -l output有沒有限制訪問的規則。

4. 要保證輸入版本庫的url正確。

後記:1. 版本庫的初次匯入可以採用多種方式:

(1)直接構建好版本庫目錄,並將原始碼拷貝的對應的位置,然後svn import即可;

(2)先用svn checkout取出版本,然後構建目錄和原始碼,執行svn add 並且svn commit即可。

2. 匯入或者提交檔案型別的控制

svn客戶端是可以配置忽略哪些些檔案,比如說我們不想提交*.o之類的檔案。那麼可以通過設定svn:ignore或者global-ignore來進行過濾相關的檔案。通常預設的情況就會過濾掉*.o, *.so,*.a等被svn認為是中間生成的檔案。我本人使用的客服端不管是win的還是linux的都是這種預設情況。

但是,如果有時基於某種需要,或者是匯入乙個別人之前維護的工程,裡面有些*.so,*.a檔案必須保留,那麼如果在第一次import的時候全部匯入呢?曾經問過有些朋友說,svn add或者svn import是可以直接把這種檔案匯入到版本庫的。但是我個人進行測試的時候,確實匯入不進去,除非你直接svn add這個檔案,然後提交應該就可以了。

如果這樣的檔案比較多,而且比較分散,那麼如何解決呢?看一下svn import和svn add這兩個命令的幫助,都有--no-ignore選項。這個選項的功能就是執行相應動作的時候,不忽略任何檔案。那麼執行以下兩條命令:

svn import [source] [repository] --no-ignore

或svn add [source] --no-ignore

會自動將source目錄下所有的內容全部import或者add。

因此,通過--no-ignore選項,可以滿足提交一些特殊檔案的需求。

3. 用乙個舊版本的svnadmin建立的版本庫,直接拷貝到另外一台svn版本比較高的pc上使用時,發現提示資料庫版本不匹配。

解決的方法:

(1)匯出舊的版本庫內容,包含版本資訊

svnadmin dump repos_path [-r lower[:upper]] [--incremental]

如果我將版本庫完整的資訊都倒出來的話,執行如下命令:

# svnadmin dump old_repos > repos.dump

預設版本庫dump的時候是輸出在終端的,通過重定下輸出到repos.dump檔案裡面。該檔案實際是文字檔案。

(2)匯入舊版本庫的內容

在需要匯入的位置,新建乙個版本庫

# svnadmin create new_repos

然後將repos.dump檔案匯入到新的版本庫:

# svnadmin load new_repos < repos.dump

該命令成功執行完畢之後,新的版本庫中已經包含了old_repos版本庫中的所有版本內容。

svnadmin dump和svnadmin load命令都支援匯入/匯出某個指定revsion或者某個指定範圍的所有revision。

--godbach. apr 23,2009

配置自己的ubuntu

安裝zshapt install zshbash c wget o 切換想要的主題 檢視可以使用的主題 ls oh my zsh themes修改主題 編輯 zshrc檔案 zsh theme candy 即可使用candy主題 修改candy為想要使用的主題即可 如果使用agnoster主題則需要...

我自己的ubuntu配置

1 ubuntu下gcc g 等的安裝 sudo apt get install build essential 執行完後,完成了gcc,g make的安裝。2 ubuntu 禁止啟動時同步時鐘 禁止 chmod x etc init.d ntpdate 啟用 chmod x etc init.d ...

配置自己的CocoaPods庫

預設安裝的cocoapods確實很好用,可是畢竟自己會寫一些庫和修改一些第三方庫來用。所幸cocoapods確實是乙個神器。他可以定義自己的庫來用。如何安裝cocoapods,請參考這篇 我的boss寫了乙個基於magicalrecord的coredata的icloud設定的類。也許我們以後要用到的...