svn server 搭建
問題1:
Could not reliably determine the server's fully qualified domain name, using 內網IP for ServerName
云服務器:
內網IP 非127.0.0.1
sudo vim /etc/apache2/sites-available/default
打開default文件后,在default文件頂端加入:
ServerName 內網IP
?端口號:80 --》8080
解決方法就是將apache的監聽端口從80修改到8080即可。網絡上的一些資料是基于舊的apache進行配置或者是windows環境下的apache,與ubuntu環境下的apache2的配置有些不同。下面的配置基于Ubuntu10.10以及apache2:
step1:修改監聽端口以及主機端口為8080
?
Java代碼???
?
?
Java代碼???
step2:?只要修改virtualHost的端口即可
?
Java代碼???
?
Java代碼???
step3:重啟apache2
?
Java代碼??
SubVersion
出自Ubuntu中文
目錄[隱藏?]
|
[編輯?]?SubVersion服務安裝設置
原文出處:https://wiki.ubuntu.org.cn/SubVersion
原文作者:ubuntu.com
授權許可:創作共用協議
翻譯人員:XueCan
校對人員:無
適用版本:所有版本
文章狀態:翻譯中
本文檔闡述了如何在 Ubuntu 上設置 Subversion(通常也被稱為 svn)。我們假設本文的讀者是具有一定經驗的 Linux 用戶和系統管理員。
?
[編輯?]?簡介
如果您對 Subversion 還比較陌生,本節將給您一個關于 Subversion 的簡要介紹。
Subversion 是一款開放源代碼的版本控制系統。使用 Subversion,您可以重新加載源代碼和文檔的歷史版本。Subversion 管理了源代碼在各個時期的版本。一個文件樹被集中放置在文件倉庫中。這個文件倉庫很像是一個傳統的文件服務器,只不過它能夠記住文件和目錄的每一次變化。
[編輯?]?假設
首先我們假設您能夠在 Ubuntu 中操作 Linux 的命令、編輯文件、啟動和停止服務。當然,我們還認為您的 Ubuntu 正在運行中,您可以使用
[編輯?]?本文涉及的范圍
要通過 HTTP 協議訪問 SVN 文件倉庫,您需要安裝并配置好 Web 服務器。Apache 2 被證實可以很好的與 SVN 一起工作。關于 Apache 2 的安裝超出了本文的范圍,盡管如此,本文還是會涉及如何配置 Apache 2 使用 SVN。
類似的,要通過 HTTPS 協議訪問 SVN 文件倉庫,您需要在您的 Apache 2 中安裝并配置好數字證書,這也不在本文的討論范圍之中。
[編輯?]?安裝
幸運的,Subversion 已經包含在 main 倉庫中。所以,要安裝 Subversion,您只需要簡單的運行:
$ sudo apt-get install subversion $ sudo apt-get install libapache2-svn如果系統報告了依賴關系的錯誤,請找出相應的軟件包并安裝它們。如果存在其它問題,也請自行解決。如果您是再不能解決這些問題,可以考慮通過 Ubuntu 的網站、Wiki、論壇或郵件列表尋求支持。
[編輯?]?服務器配置
您應該已經安裝了上述的軟件包。本節將闡述如何創建 SVN 文件倉庫以及如何設置項目的訪問權限。
[編輯?]?創建 SVN 倉庫
許多位置都可以放置 Subversion 文件倉庫,其中兩個最常用的是:/usr/local/svn 以及 /home/svn。為了在下面的描述中簡單明了,我們假設您的 Subversion 文件倉庫放在 /home/svn,并且你的項目名稱是簡單的“myproject”。
同樣的,也有許多常用的方式設置文件倉庫的訪問權限。然而,這也是安裝過程中最經常出現錯誤的地方,因此我們會對此進行一個詳細說明。典型 的情況下,您應該創建一個名為“Subversion”的組來擁有文件倉庫所在的目錄。下面是一個快速的操作說明,有關內容請參考相關文檔的詳細說明:
- 在 Ubuntu 菜單上選擇“系統->系統管理->用戶和組”;
- 切換到“組”標簽;
- 點擊“添加組”按鈕;
- 組名為“subversion”;
- 將您自己和“www-data”(Apache 用戶)加入組成員中;
- 點擊“OK”以確認修改,關閉該程序。
或者使用命令完成上述功能(增加組,并且把用戶加到組里):
sudo addgroup subversion sudo usermod -G subversion -a www-data再或者直接使用命令編輯組文件"sudo vi /etc/group",增加組和成員(不推薦):
$ sudo vi /etc/group結果看上去,像這樣。
$ cat /etc/group|grep subversion subversion:x:1001:www-data,exp您需要注銷然后再登錄以便您能夠成為 subversion 組的一員,然后就可以執行簽入文件(Check in,也稱提交文件)的操作了。
現在執行下面的命令
$ sudo mkdir /home/svn $ cd /home/svn $ sudo mkdir myproject $ sudo chown -R root:subversion myproject下面的命令用于創建 SVN 文件倉庫:
$ sudo svnadmin create /home/svn/myproject賦予組成員對所有新加入文件倉庫的文件擁有相應的權限:
$ sudo chmod -R g+rws myproject如果上面這個命令在創建SVN文件倉庫之前運行,你可能在后續Check in的時候遇到如下錯誤:
Can't open '/home/svn/myproject/db/txn-current-lock': Permission denied查看txn-current-lock文件的權限和用戶以及組信息,應該類似于:
$ ls -l /home/svn/myproject/db/txn-current-lock -rw-rwSr-- 1 root subversion 0 2009-06-18 15:33 txn-current-lock除了權限以外,用戶及其組如果不對,則仍然會遇到上述問題,可以再次運行命令:
$ sudo chown -R root:subversion myproject[編輯?]?訪問方式
Subversion 文件倉庫可以通過許多不同的方式進行訪問(Check Out,簽出)——通過本地硬盤,或者通過各種網絡協議。無論如何,文件倉庫的位置總是使用 URL 來表示。下表顯示了不同的 URL 模式對應的訪問方法:
| 模式 | 訪問方法 |
| file:/// | 直接訪問本地硬盤上文件倉庫 |
| http:// | 通過 WebDAV 協議訪問支持 Subversion 的 Apache 2 Web 服務器 |
| https:// | 類似?http://,支持?SSL 加密 |
| svn:// | 通過自帶協議訪問 svnserve 服務器 |
| svn+ssh:// | 類似 svn://,支持通過 SSH 通道 |
本節中,我們將看到如何配置 SVN 以使之能夠通過所有的方法得以訪問。當然這里我們之討論基本的方法。要了解更高級的用途,我們推薦您閱讀《使用 Subversion 進行版本控制》在線電子書?。
[編輯?]?直接訪問文件倉庫(file://)
這是所有訪問方式中最簡單的。它不需要事先運行任何 SVN 服務。這種訪問方式用于訪問本地的 SVN 文件倉庫。語法是:
$ svn co file:///home/svn/myproject 或者 $ svn co file://localhost/home/svn/myproject注意:如果您并不確定主機的名稱,您必須使用三個斜杠(///),而如果您指定了主機的名稱,則您必須使用兩個斜杠(//).
對文件倉庫的訪問權限基于文件系統的權限。如果該用戶具有讀/寫權限,那么他/她就可以簽出/提交修改。如果您像前面我們說描述的那樣設置了相應的組,您可以簡單的將一個用戶添加到“subversion”組中以使其具有簽出和提交的權限。
[編輯?]?通過 WebDAV 協議訪問(http://?)
要通過 WebDAV 協議訪問 SVN 文件倉庫,您必須配置您的 Apache 2 Web 服務器。您必須加入下面的代碼片段到您的 /etc/apache2/mods-available/dav_svn.conf中:
<Location /svn/myproject> DAV svn SVNPath /home/svn/myproject AuthType Basic AuthName "myproject subversion repository" AuthUserFile /etc/subversion/passwd <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location>如果需要用戶每次登錄時都進行用戶密碼驗證,請將<LimitExcept GET PROPFIND OPTIONS REPORT>與</LimitExcept>兩行注釋掉。
當您添加了上面的內容,您必須重新起動 Apache 2 Web 服務器,請輸入下面的命令:
sudo /etc/init.d/apache2 restart接下來,您需要創建 /etc/subversion/passwd 文件,該文件包含了用戶授權的詳細信息。要添加用戶,您可以執行下面的命令:
sudo htpasswd -c /etc/subversion/passwd user_name它會提示您輸入密碼,當您輸入了密碼,該用戶就建立了。“-c”選項表示創建新的/etc/subversion/passwd文件,所以user_name所指的用戶將是文件中唯一的用戶。如果要添加其他用戶,則去掉“-c”選項即可:
sudo htpasswd /etc/subversion/passwd other_user_name您可以通過下面的命令來訪問文件倉庫:
$ svn co http://hostname/svn/myproject myproject --username user_name它會提示您輸入密碼。您必須輸入您使用 htpasswd 設置的密碼。當通過驗證,項目的文件就被簽出了。
警告:密碼是通過純文本傳輸的。如果您擔心密碼泄漏的問題,我們建議您使用 SSL 加密,有關詳情請看下一節。
[編輯?]?通過具有安全套接字(SSL)的 WebDAV 協議訪問(https://?)
通過具有 SSL 加密的 WebDAV 協議訪問 SVN 文件倉庫(https://)非常類似上節所述的內容,除了您必須為您的Apache 2 Web 服務器設置數字證書之外。
您可以安裝由諸如 Verisign 發放的數字簽名,或者您可以安裝您自己的數字簽名。
我們假設您已經為 Apache 2 Web 服務器安裝和配置好了相應的數字證書。現在按照上一節所描述的方法訪問 SVN 文件倉庫,別忘了把?http://?換成?https://?。如何,幾乎是一模一樣的!
[編輯?]?通過自帶協議訪問(svn://)
當您創建了 SVN 文件倉庫,您可以修改 /home/svn/myproject/conf/svnserve.conf 來配置其訪問控制。
例如,您可以取消下面的注釋符號來設置授權機制:
現在,您可以在“passwd”文件中維護用戶清單。編輯同一目錄下“passwd”文件,添加新用戶。語法如下:
username = password #(注意行開始不要有多余空格)要了解詳情,請參考該文件。
現在,您可以在本地或者遠程通過 svn://訪問 SVN 了,您可以使用“svnserve”來運行 svnserver,語法如下:
當您執行了該命令,SVN 就開始監聽默認的端口(3690)。您可以通過下面的命令來訪問文件倉庫:
$ svn co svn://hostname/myproject myproject --username user_name基于服務器的配置,它會要求輸入密碼。一旦通過驗證,就會簽出文件倉庫中的代碼。
要同步文件倉庫和本地的副本,您可以執行 update 子命令,語法如下:
要了解更多的 SVN 子命令,您可以參考手冊。例如要了解 co (checkout) 命令,請執行:
$ svn co --help 或者這樣 $ svn --help commit 或者直接 ? svn help co checkout (co): 從版本庫簽出工作副本。 使用: checkout URL[@REV]... [PATH] 。。。。。一個實例:
? killall svnserve; svnserve -d -r /home/svn/ /home/svn/lj12-source/conf ? dog * authz:[groups] authz:lj12 = veexp authz:[lj12-source:/] <-注意寫法。 authz:veexp = rw authz:@lj12 = rw authz:* = passwd:[users] <-2個用戶和密碼。 passwd:veexp = icep passwd:test = test svnserve.conf:[general] svnserve.conf:anon-access = none svnserve.conf:auth-access = write svnserve.conf:password-db = passwd svnserve.conf:authz-db = authz <-如果不啟用authz,則test也可以取出。 ? svn co svn://localhost/lj12-source --username veexp 認證領域: <svn://localhost:3690> a712643f-661e-0410-8ad4-f0554cd88977 用戶名: veexp “veexp”的密碼: A lj12-source/tim.h A lj12-source/en.c ......認證失敗的密碼緩沖記錄位置,明文密碼。到1.6版本,可能使用keyring管理。如果調試密碼,直接刪除如下文件就可。
~/.subversion/auth/svn.simple/:
eea34a6f7baa67a3639cacd6a428dba4[編輯?]?通過具被SSH隧道保護的自帶協議訪問(svn+ssh://)
配置和服務器進程于上節所述相同。我們假設您已經運行了“svnserve”命令。
我們還假設您運行了 ssh 服務并允許接入。要驗證這一點,請嘗試使用 ssh 登錄計算機。如果您可以登錄,那么大功告成,如果不能,請在執行下面的步驟前解決它。
svn+ssh:// 協議使用 SSH 加密來訪問 SVN 文件倉庫。如您所知,數據傳輸是加密的。要訪問這樣的文件倉庫,請輸入:
$ svn co svn+ssh://hostname/home/svn/myproject myproject --username user_name注意:在這種方式下,您必須使用完整的路徑(/home/svn/myproject)來訪問 SVN 文件倉庫
基于服務器的配置,它會要求輸入密碼。您必須輸入您用于登錄 ssh 的密碼,一旦通過驗證,就會簽出文件倉庫中的代碼。
您還應該參考 SVN book 以了解關于 svn+ssh:// 協議的詳細信息。
[編輯?]?參考資料
- Setting up Apache on Ubuntu
- SVN Home page
- SVN Book
- Apache 2 Documentation
- Mod-SSL
- Apache-SSL
環境
Ubuntu 10.04Subversion 1.6.6
1、SVN安裝
$ sudo apt-get install subversion
2、添加SVN管理用戶及subversion組
# adduser svnuser
# addgroup subversion
# addgroup svnuser subversion
3、創建項目目錄
# mkdir /home/svn
# cd /home/svn
# mkdir myProject
# chown -R root:subversion myProject
# chmod -R g+rws myProject
4、創建SVN文件倉庫
# svnadmin create /home/svn/myProject
myProject文件夾必須為空
5、修改文件倉庫訪問權限
# chmod 700 /home/svn/myProject
6、設置訪問權限
位于/home/svn/myProject/conf/文件夾下的authz、passwd、svnserve.conf文件
svnserve.conf:svn服務配置文件,該文件版本庫目錄的conf目錄下。?
passwd:用戶名口令文件,該文件名在文件svnserve.conf中指定,缺省為同目錄下的。?
authz:權限配置文件,該文件名也在文件svnserve.conf中指定,缺省為同目錄下的。
(1)設置svnserve.conf
# vim svnserve.conf
取消一下四行的注釋
anon-access = read
auth-access = write
password-db = password
authz-db = authz
并將anon-access = read的read改為none,禁止匿名用戶訪問。
(2)設置passwd
# vim passwd
[users]
admin = admin
user = user
設置兩個用戶admin和user
(3)設置authz
# vim authz
[groups]
admin = admin
user = user
[/]
@admin=rw
*=r
admin屬于admin組,具有讀寫權限;
user用戶屬于user組,具有讀權限。
7、啟動SVN服務
# svnserve -d -r /home/svn
-d 表示以守護進程模式運行
-r 指定SVN根目錄
8、設置SVN開機啟動
(1).創建執行腳本svn.sh(/root路徑下)
#!/bin/bashsvnserve -d -r /home/svn
(2).添加可執行權限
#chmod ug+x /root/svn.sh
(3).添加自動運行
#vim /etc/init.d/rc.local
在最后添加一行內容如下:
/root/svn.sh
(4).檢查重啟服務器,使用ps -aux |grep svn看看svn進程是否啟動了。
后記:
?
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,?
詳細使用方法參考手冊。該命令的格式為:
?
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
。
后記:
?
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,?
詳細使用方法參考手冊。該命令的格式為:
?
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
。
后記:
?
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,?
詳細使用方法參考手冊。該命令的格式為:
?
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
。
http://wenku.baidu.com/link?url=ZGHAJwPDIrdEehrN8zrWni0HRxA0YPGtBsrhPXRwRfQb2EpGPmsShVyEHwO6sbOC-QhtBec_hjXhAd0O02Kkg2RGDW0arYAfdVtEpA80Hyeubuntu下SVN服務器安裝配置
一、SVN安裝
1.安裝包
$ sudo apt-get install subversion
2.添加svn管理用戶及subversion組
$ sudo adduser svnuser
$ sudo addgroup subversion
$ sudo addgroup svnuser subversion?
3.創建項目目錄
$ sudo mkdir /home/svn
$ cd /home/svn
$ sudo mkdir fitness
$ sudo chown -R root:subversion fitness
$ sudo chmod -R g+rws fitness
4.創建SVN文件倉庫
$ sudo svnadmin create /home/svn/fitness
5.訪問方式及項目導入:
$ svn co file:///home/svn/fitness
或者
$ svn co file://localhost/home/svn/fitness
* 注意:
如果您并不確定主機的名稱,您必須使用三個斜杠(///),而如果您指定了主機的名稱,則您必須使用兩個斜杠(//).
//--
下面的命令用于將項目導入到SVN 文件倉庫:
$ svn import -m "New import" /home/svn/fitness file:///home/svnuser/src/fitness
一定要注明導入信息
//--------------------------//
6.訪問權限設置
修改 /home/svn/fitness目錄下:
svnserve.conf 、passwd 、authz三個文件,行最前端不允許有空格
//--
編輯svnserve.conf文件,把如下兩行取消注釋
password-db = password
authz-db = authz
//補充說明
# [general]
anon-access = read
auth-access = write
password-db = passwd
其中 anon-access 和 auth-access 分別為匿名和有權限用戶的權限,默認給匿名用戶只讀的權限,但如果想拒絕匿
名用戶的訪問,只需把 read 改成 none 就能達到目的。
//--
編輯/home/svnuser/etc/passwd?如下:
[users]
mirze = 123456
test1 = 123456
test2 = 123456
//--
編輯/home/svnuser/etc/authz如下
[groups]
admin = mirze,test1
test = test2
[/]
@admin=rw
*=r
這里設置了三個用戶mirze,test1,test2密碼都是123456
其中mirze和test1屬于admin組,有讀和寫的權限,test2屬于test組只有讀的權限
7.啟動SVN服務
svnserve -d -r /home/svn
描述說明:
-d 表示svnserver以“守護”進程模式運行
-r 指定文件系統的根位置(版本庫的根目錄),這樣客戶端不用輸入全路徑,就可以訪問版本庫
如: svn://192.168.12.118/fitness
這時SVN安裝就完成了.
局域網訪問方式:
例如:svn checkout svn://192.168.12.118/fitness --username mirze --password 123456 /var/www/fitness
-----------------------------------------------------------------------
二、HTTP:// [apache]
1.安裝包 [已安裝subversion]
$ sudo apt-get install libapache2-svn
創建版本倉庫:
sudo svnadmin create /目錄地址
目錄地址必須存在,這個就是保存版本倉庫的地方,不同的版本倉庫創建不同的文件夾即可,比如:
sudo svnadmin create /home/svn/project
本來/home/svn/project這個目錄下什么都沒有,執行下面的命令之后再去看一下,多出一些文件和文件夾,我們需要操作的是conf這個文件夾,這個文件夾下有一個文件,叫做passwd,用來存放用戶名和密碼。
然后把這個版本倉庫目錄授權給apache讀寫:
sudo chown -R www-data:www-data /目錄地址
然后來到打開apache配置文件:
sudo gedit /etc/apache2/mods-available/dav_svn.conf
加入如下內容:
<Location /project>
DAV svn
SVNPath /home/svn/project
AuthType Basic
AuthName “myproject subversion repository”
AuthUserFile /home/svn/project/conf/passwd
#<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
#</LimitExcept>
</Location>
location說的是訪問地址,比如上述地址,訪問的時候就是
http://127.0.0.1/project
其中有兩行被注釋掉了,以保證每次都需要用戶名密碼。
最后一步就是創建訪問用戶了,建議將用戶名密碼文件存放在當前版本倉庫下conf文件夾下,這樣版本倉庫多的時候無至于太亂。
因為conf文件夾下已經存在passwd文件了,所以直接添加用戶:
sudo htpasswd -c /home/svn/project/conf/passwd test
然后輸入兩遍密碼,laoyang這個用戶就創建好了。
打開/home/svn/project/conf/passwd這個文件,會開到形如如下形式的文本:
test:WEd.83H.gealA?//后面是加密后的密碼。
創建以后,再次需要往別的版本倉庫添加這個用戶,直接把這一行復制過去就可以了。
重啟apache就可以了。
sudo /etc/init.d/apache2 restart
-----------------------------------------------------------------------
三、同步更新 [勾子]
同步程序思路:用戶提交程序到SVN,SVN觸發hooks,按不同的hooks進行處理,這里用到的是post-commit,利用post-commit到代碼檢出到SVN服務器的本地硬盤目錄,再通過rsync同步到遠程的WEB服務器上。
知識點:
1、SVN的hooks
# start-commit 提交前觸發事務
# pre-commit 提交完成前觸發事務
# post-commit 提交完成時觸發事務
# pre-revprop-change 版本屬性修改前觸發事務
# post-revprop-change 版本屬性修改后觸發事務
通過上面這些名稱編寫的腳本就就可以實現多種功能了,相當強大。
2、同步命令rsync的具體參數使用
3、具有基個語言的編程能力bash python perl都可以實現
post-commit具體實現細節
post-commit腳本
編輯文件:sudo vim /home/svn/fitness/hooks/post-commit
注意:編輯完成post-commit后,執行:sudo chmod 755 post-commit
內容:
#!/bin/sh
export LANG=zh_CN.UTF-8
sudo /usr/bin/svn update /var/www/www --username mirze --password 123456
或
#Set variableSVN=/usr/bin/svn
WEB=/home/test_nokia/
RSYNC=/usr/bin/rsync
LOG=/tmp/rsync_test_nokia.log
WEBIP="192.168.0.23"
export LANG=en_US.UTF-8
#update the code from the SVN
$SVN update $WEB --username user --password?password
#If the previous command completed successfully, to continue the following
if [ $? == 0 ]
then
?echo ""?>> $LOG
?echo `date` >> $LOG
?echo "##############################" >> $LOG
?chown -R nobody:nobody /home/test_nokia/
?#Synchronization code from the SVN server to the WEB server, notes:by the key
?$RSYNC -vaztpH?--timeout=90?--exclude-from=/home/svn/exclude.list $WEB root@$WEBIP:/www/ >> $LOG
fi
以上是具體的post-commit程序
注意事項:
1、一定要定義變量,主要是用過的命令的路徑。因為SVN的考慮的安全問題,沒有調用系統變量,如果手動執行是沒有問題,但SVN自動執行就會無法執行了。
2、SVN update 之前一定要先手動checkout一份出來,還有這里一定要添加用戶和密碼如果只是手動一樣會更新,但自動一樣的不行。
3、加上了對前一個命令的判斷,如果update的時候出了問題,程序沒有退出的話還會繼續同步代碼到WEB服務器上,這樣會造成代碼有問題
4、記得要設置所屬用戶,因為rsync可以同步文件屬性,而且我們的WEB服務器一般都不是root用戶,用戶不正確會造成WEB程序無法正常工作。
5、建議最好記錄日志,出錯的時候可以很快的排錯
6、最后最關鍵的數據同步,rsync的相關參數一定要清楚,這個就不說了。注意幾個場景:
這里的環境是SVN服務器與WEB服務器是開的
把SVN服務器定義為源服務器 WEB服務器為目的服務器
場景一、如果目的WEB服務器為綜合的混雜的,像只有一個WEB靜態資源,用戶提交的,自動生成的都在WEB的一個目錄下,建議不要用–delete這個參數
上面這個程序就是這樣,實現的是源服務器到目的服務器的更新和添加,而沒有刪除操作,WEB服務器的內容會多于源SVN的服務器的
場景二、實現鏡像,即目的WEB服務器與源SVN服務器一樣的數據,SVN上任何變化WEB上一樣的變化,就需要–delete參數
場景三、不需要同步某些子目錄,可能有些目錄是緩存的臨時垃圾目錄,或者是專用的圖片目錄(而不是樣式或者排版的)要用exclude這個參數
注意:這個參數的使用不用寫絕對路徑,只要目錄名稱就行 aa代表文件 aa/ 代表目錄 ,缺點就是如果有多個子目錄都是一樣的名稱那么這些名稱就都不會被同步
建議用–exclude-from=/home/svn/exclude.list 用文件的形式可以方便的添加和刪除
exclude.list
.svn/
.DS_Store
images/
利用SVN的鉤子還可以寫出很多的程序來控制SVN 如代碼提交前查看是否有寫日志,是否有tab,有將換成空格,是否有不允許上傳的文件,是否有超過限制大小的文件等等。
總結
以上是生活随笔為你收集整理的svn server 搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AB罗克韦尔-pid教程
- 下一篇: Kettle下载资源