subversion(以下簡稱svn)是近年來崛起的版本管理工具,是cvs的接班人。
svn服務器有2種運行方式:獨立服務器和借助apache。2種方式各有利弊。
svn存儲版本數據也有2種方式:BDB和FSFS。因為BDB方式在服務器中斷時,有可能鎖住數據,所以還是FSFS方式更安全一點。
1. svn服務器安裝操作系統: Redhat Linux
AS4安裝包獲取:下載http://subversion.tigris.org/downloads/subversion-1.4.0.tar.gz和
http://subversion.tigris.org/downloads/subversion-deps-1.4.0.tar.gz。編譯:
以root用戶登錄。
將subversion-1.4.0.tar.gz和subversion-deps-1.4.0.tar.gz傳到服務器。
tar xfvz subversion-1.4.0.tar.gz
tar xfvz subversion-deps-1.4.0.tar.gz
cd subversion-1.4.0
./configure --prefix=/opt/svn --without-berkeley-db --with-zlib
(注:以svnserve方式運行,不加apache編譯參數。以fsfs格式存儲版本庫,不編譯berkeley-db)
make clean
make
make install
vi /etc/profile,在/etc/profile最后加入:
PATH=$PATH:/opt/svn/bin
export PATH
測試:
svnserve --version
如果顯示如下,安裝成功:
svnserve, version 1.4.0 (r21228)
compiled Oct 12 2006, 10:18:56Copyright (C) 2000-2006 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).The following repository back-end (FS) modules are available:* fs_fs : Module for working with a plain file (FSFS) repository.
2. svn配置
建立版本庫目錄,可建多個:
mkdir -p /opt/svndata/repos1
mkdir -p /opt/svndata/repos2
建立版本庫:
svnadmin create /opt/svndata/repos1
svnadmin create /opt/svndata/repos2
修改版本庫配置文件:
版本庫1:
vi /opt/svndata/repos1/conf/svnserve.conf
內容修改為:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos1
版本庫2:
vi /opt/svndata/repos2/conf/svnserve.conf內容修改為:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos2
即除realm = repos2外,其他與版本庫1配置文件完全相同。如果有更多的版本庫,
依此類推。配置允許訪問的用戶:
vi /opt/svn/conf/pwd.conf
為了簡化配置,2個版本庫共用1個用戶配置文件。如有必要,也可以分開。注意:對用戶配置文件的修改立即生效,不必重啟svn。文件格式如下:
[users]
<用戶1> = <密碼1>
<用戶2> = <密碼2>
其中,[users]是必須的。下面列出要訪問svn的用戶,每個用戶一行。示例:
[users]
alan = password
king = hello
配置用戶訪問權限:
vi /opt/svn/conf/authz.conf
為了簡化配置,3個版本庫共用1個權限配置文
件/opt/svn/conf/pwd.conf。如有必要,也可以分開。文件中定義用戶組和版本庫目錄權限。注意:
* 權限配置文件中出現的用戶名必須已在用戶配置文件中定義。
* 對權限配置文件的修改立即生效,不必重啟svn。用戶組格式:
[groups]
<用戶組名> = <用戶1>,<用戶2>
其中,1個用戶組可以包含1個或多個用戶,用戶間以逗號分隔。版本庫目錄格式:
[<版本庫>:/項目/目錄]
@<用戶組名> = <權限>
<用戶名> = <權限> 其中,方框號內部分可以有多種寫法:
/,表示根目錄及以下。根目錄是svnserve啟動時指定的,我們指定為/opt/svndata。這樣,/就是表示對全部版本庫設置權限。
repos1:/,表示對版本庫1設置權限
repos2:/occi, ,表示對版本庫2中的occi項目設置權限
repos2:/occi/aaa, ,表示對版本庫2中的occi項目的aaa目錄設置權限 權限主體可以是用戶組、用戶或*,用戶組在前面加@,*表示全部用戶。權限可以是w、r、wr和空,空表示沒有任何權限。示例:
[groups]
admin = alan[/]
@admin = rw[repos1:/occi/aaa]
king = rw[repos2:/pass]
king =
刪除無用文件:
rm /opt/svndata/repos1/conf/authz
rm /opt/svndata/repos1/conf/passwd
rm /opt/svndata/repos2/conf/authz
rm /opt/svndata/repos2/conf/passwd
3. 啟動svn
建立啟動svn的用戶:
useradd svn
passwd svn
根據提示為用戶svn設置密碼允許用戶svn訪問版本庫:
chown –R svn:svn /opt/svndata
chown –R svn:svn /opt/data啟動svn:
su - svn -c "svnserve -d --listen-port 9999 -r /opt/svndata"
其中:
su – svn表示以用戶svn的身份啟動svn
-d表示以daemon方式(后臺運行)運行
--listen-port 9999表示使用9999端口,可以換成你需要的端口。但注意,使用1024以下的端口需要root
權限
-r /opt/svndata指定根目錄是/opt/svndata檢查:
ps –ef|grep svnserve如果顯示如下,即為啟動成功:
svn 6941 1 0 15:07 ? 00:00:00 svnserve -d --listen-port 9999 -r
/opt/svndata參考資料:
http://www.gbunix.com/htmldata/2006_07/15/27/article_1337_1.html
http://www.iusesvn.com/bbs/thread-157-1-1.html
http://16hot.blog.isyi.com/post/1/552
檢測服務是否開啟:netstat -ntlp如果看到3690的端口正常開放了,證明SVN啟動了。]
下面是機器上的端口顯示:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 0 0 0.0.0.0:32769 0.0.0.0:* LISTEN
2611/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
2591/portmap
tcp 0 0 0.0.0.0:113 0.0.0.0:* LISTEN
2827/xinetd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
4860/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
2846/sendmail: acce
tcp 0 0 :::3690 :::* LISTEN
5513/svnserve
tcp 0 0 :::22 :::* LISTEN
2812/sshd
下面這個就是了:
tcp 0 0 :::3690 :::* LISTEN
5513/svnserve
好了,svn已經架起來了
在 Linux/Apache 2.2 上配置SVN服務器
準備,下載所需要文件.
檢查已安裝的 Apache2 是否已經安裝了 mod_dav .
編譯SVN,遇到的問題和解決方法
使用 默認文件系統(fsfs) 保存數據
使用 Berkeley DB 保存數據
配置Apache和SVN,測試.
其它小結
從Windows平臺上數據轉移
配置文件,使用其支持對文件中的 $Id$ 標簽每次提交的時候自動更新版本信息.
基于路徑的權限控制常用SVN命令
相關資源* 準備,下載所需要文件.
本文測試環境:ubuntu 6.06 LTS (kernel 2.6.15-25-k7,gcc-4.0.3) /ubuntu server (2.6.15-26-
server,gcc-4.0.4)
Subversion 1.3.2Apache 2.2.2最新的版本 Subversion 可以在這里找到 :
http://subversion.tigris.org/project_packages.html* 檢查已安裝的 Apache2 是否已經安裝了
mod_dav .
如果已經成功安裝了Apache,使用 httpd -M 來查看有沒有安裝 dav_module,如果沒有的話 必須附加
‘–enable-dav’ ‘–enable-dav-fs’ 兩個參數重新編譯 Apache,否則即使編譯通過了svn,apache也
會啟動不起來.如何編譯 Apache 請參考我另外一篇文章.* 編譯SVN,遇到的問題和解決方法.
使用默認的文件系統保存數據.
最終完整通過安裝和測試的編譯參數為:./configure --with-apxs=/usr/local/apache2/bin/apxs \
--with-apr=/home/src/server/httpd-2.2.2/srclib/apr \
--with-apr-util=/home/src/server/httpd-2.2.2/srclib/apr-utilmake
make install其中 /home/src/server/ 為 httpd-2.2.2 源代碼所在文件夾,根據實際情況調整一下.◆
遇到問題:1) --with-apr 和 --with-apr-util 如果沒有加上的話,即使編譯成功了也會出現Can't set position pointer in file ‘/home/svn/repos/db/revs/0′: Invalid argument
這樣的錯誤提示.2) 暫時不能使用 Berkeley DB [* 已解決]svn保存文件更新數據庫的方法有兩個,一種是直接使用 fs (filesystem)來保存,另一種是通過Oracle提供支持的開源數據庫 Berkeley DB 進行保存。但是如果加上 –with-berkeley-db=/usr/local/BerkeleyDB.4.4 就會configure時就會報錯.configure: error: APR-UTIL was installed independently, it won’t be possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4我想 apr-unit 暫時不支持吧,我們就用默認的fs好了.3) 在make 的時候可能會遇到缺少 srclib/apr/libapr-1.la,srclib/apr-util/libaprutil-1.la 兩個文件,找不到而make error.解決辦法:/usr/local/apache2/lib/ 中找到,將其復制到源代碼文件夾相應的位置中.Update!!使用 BerkeleyDB 保存數據.
1) 安裝 BerkeleyDBcd /usr/local/src
wget http://downloads.sleepycat.com/db-4.3.29.tar.gztar xzvf db-4.3.29.tar.gz
cd /usr/local/src/db-4.3.29/build_unix
../dist/configure --enable-compat185
make
make install2) 更新apr和apr-util源代碼# 清理編譯后的.la文件
cd /usr/local/src/httpd-2.2.3make cleancd /usr/local/src/subversion-1.3.2
rm -rf apr
rm -rf apr-util
cp -rf /usr/local/src/httpd-2.2.3/srclib/apr ./
cp -rf /usr/local/src/httpd-2.2.3/srclib/apr-util/ ./3) 編譯安裝./configure --with-
apxs=/usr/local/apache2/bin/apxs \
--with-berkeley-db=/usr/local/BerkeleyDB.4.3 \
--with-ssl
make
make install
◆ 遇到問題:
1) BerkeleyDB 版本不能大于 4.3.否則同樣會出現以下錯誤.configure: error: APR-UTIL was
installed independently, it won’t be
possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4
主要是apr-util 暫時不支持4.4的版本.2) 必須更新apr,apr-util 源代碼.
subversion-1.3.2 自帶的 apr-util 的版本是0.9.6的,必須升級為 1.2.7 雖然能編譯過去。但在 svn
checkout 的時候會提示svn: REPORT request failed on ‘/!svn/vcc/default’
svn: REPORT of ‘/!svn/vcc/default’: Could not read status line: connection was closed by
server.
這個問題困擾了我很長時間,Google和官方論壇都無結果。后來昨天竟然自己無意中解決了,感動的得哭了:)* 配置Apache和SVN,測試
成功編譯svn后會在 httpd.conf 中自動加上LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
兩個模塊,沒有的話,自行加上或檢測是否真的編譯成功.假設我們現在要將一個名為 Lair 的項目導入
到 SVN中1). Apache的配置在 conf/httpd.conf 或 conf/extra/httpd-vhosts.conf 中加入
<Location /svn/Lair>DAV svn
SVNPath /home/svn/Lair
</Location>
可以參考以下apache的配置,實現數據加密傳輸,用戶身份驗證.Listen 443AddType
application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl.SSLPassPhraseDialog exec:/etc/sendsslpwd
SSLSessionCache shmcb:/usr/local/apache2/logs/ssl_scache(512000)
SSLSessionCacheTimeout 300
SSLMutex file:/usr/local/apache2/logs/ssl_mutex<VirtualHost _default_:443>
DocumentRoot /var/SVNRoot
ServerName svn.yousite.com:443
ServerAdmin webmaster@yousite.com
<Location />DAV svn
SVNPath /var/SVNRoot
AuthzSVNAccessFile /etc/svnserve.conf
Satisfy Any
AuthType Basic
AuthName “yousite SVN Repository”
AuthUserFile /etc/httpd-passwords.txt
Require valid-user</Location>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/ssl/server.crt
SSLCertificateKeyFile /etc/ssl/server.key</VirtualHost>更詳細的配置說明文檔
http://svnbook.red-bean.com/nightly/en/svn.ref.mod_dav_svn.conf.html2). 配置,并且測試SVN,創建一個新用戶,用了保存倉庫.
useradd -m svn
創建一個新模塊su daemon (apache是以daemon用戶運行的,所以要切換身份,否則可能會報目錄訪問權限錯誤)
svnadmin create --fs-type fsfs /home/svn/Lair
導入原來的項目svn import /var/www/Lair http://localhost/svn/Lair -m ‘Initial import’重新建
立工作目錄rm -rf /var/www/Lair (注意備份!!)
svn checkout http://localhost/svn/Lair
測試打開 http://localhost/svn/Lair如能看到一個你項目錄列表,說明您成功了。
* 其它小結
數據轉移:從 Windows 平臺 SVN 服務器轉移
如果windows svn儲存的格式也是dbd的話,直接將SVN的文件夾copy過來即可.然后
執行 svnadmin recover /var/SVNRoot 檢查一下數據庫是否損壞.最后注意權限,確保 db 目錄下的所有
文件可寫。chmod 755 db
chmod 666 db/*
否則checkout時出現以下錯誤,多數是因為文件或者目錄權限問題引起的,可以嘗試用 chown 或者
chmod 命令修改一下權限<m:human-readable errcode=”160029″>Could not open the requested SVN
filesystem
</m:human-readable><m:human-readable errcode=”13″>
Could not open the requested SVN filesystem
</m:human-readable>另外一種方法沒有測試過,原理大致和mysqldump一樣,將svn導出為文本文件,然
后重新導入,好處是可以避免因為存儲格式不同而導致的數據轉移困難。# dump data to file
(assuming a repo @ c:\repo):svnadmin dump c:\repo > c:\repo.txt
# Copy the file over to linux:
mkdir /repo
svnadmin create /repo
svnadmin load /repo < /repo.txt
設置訪問控制當 httpd.conf 中 設置 AuthzSVNAccessFile 時,
可以設置不同用戶對不同目錄的訪問控制.以下是一個例子.[groups]
root = admin.root
web = user1,user2
soft = user3,user4[/]
@root = rw[/www]@web = rw[/soft]
@soft = rw詳細的說明文檔:http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html
配置文件,使用其支持對文件中的 $Id$ 標簽每次提交的時候自動更新版本信息(自動屬性).Windows
: C:\Documents and Settings\%USERNAME%\Application Data\Subversion\config
Linux : ~\.subversion\config[miscellany]enable-auto-props = yes
[auto-props]
*.php=svn:keywords=Id
*.html=svn:keywords=Id>> 關于自動屬性的更高級討論■ 幾條常用svn 命令
svn update
svn add “filename”
svn commit———————–
Change Log:2006-08-14 neon庫subversion已經自帶,不需要在單獨安裝,添加-with-ssl即可使用svn對ssl支持.
2006-08-10 補充自動屬性的說明.
2006-08-08 加入關于目錄訪問驗證的說明.
2006-08-07 httpd,2.2.3測試依然有效,解決bdb數據庫的支持問題,添加從Windows到Linux下的數據轉移方案。
2006-07-25 看到到.聲仔對 Can’t set position pointer in file 另一種解決方案,我當時也測試了,好像沒有成功。不想用apache源代碼編譯的朋友可以也測試一下
svn服務器有2種運行方式:獨立服務器和借助apache。2種方式各有利弊。
svn存儲版本數據也有2種方式:BDB和FSFS。因為BDB方式在服務器中斷時,有可能鎖住數據,所以還是FSFS方式更安全一點。
1. svn服務器安裝操作系統: Redhat Linux
AS4安裝包獲取:下載http://subversion.tigris.org/downloads/subversion-1.4.0.tar.gz和
http://subversion.tigris.org/downloads/subversion-deps-1.4.0.tar.gz。編譯:
以root用戶登錄。
將subversion-1.4.0.tar.gz和subversion-deps-1.4.0.tar.gz傳到服務器。
tar xfvz subversion-1.4.0.tar.gz
tar xfvz subversion-deps-1.4.0.tar.gz
cd subversion-1.4.0
./configure --prefix=/opt/svn --without-berkeley-db --with-zlib
(注:以svnserve方式運行,不加apache編譯參數。以fsfs格式存儲版本庫,不編譯berkeley-db)
make clean
make
make install
vi /etc/profile,在/etc/profile最后加入:
PATH=$PATH:/opt/svn/bin
export PATH
測試:
svnserve --version
如果顯示如下,安裝成功:
svnserve, version 1.4.0 (r21228)
compiled Oct 12 2006, 10:18:56Copyright (C) 2000-2006 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).The following repository back-end (FS) modules are available:* fs_fs : Module for working with a plain file (FSFS) repository.
2. svn配置
建立版本庫目錄,可建多個:
mkdir -p /opt/svndata/repos1
mkdir -p /opt/svndata/repos2
建立版本庫:
svnadmin create /opt/svndata/repos1
svnadmin create /opt/svndata/repos2
修改版本庫配置文件:
版本庫1:
vi /opt/svndata/repos1/conf/svnserve.conf
內容修改為:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos1
版本庫2:
vi /opt/svndata/repos2/conf/svnserve.conf內容修改為:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos2
即除realm = repos2外,其他與版本庫1配置文件完全相同。如果有更多的版本庫,
依此類推。配置允許訪問的用戶:
vi /opt/svn/conf/pwd.conf
為了簡化配置,2個版本庫共用1個用戶配置文件。如有必要,也可以分開。注意:對用戶配置文件的修改立即生效,不必重啟svn。文件格式如下:
[users]
<用戶1> = <密碼1>
<用戶2> = <密碼2>
其中,[users]是必須的。下面列出要訪問svn的用戶,每個用戶一行。示例:
[users]
alan = password
king = hello
配置用戶訪問權限:
vi /opt/svn/conf/authz.conf
為了簡化配置,3個版本庫共用1個權限配置文
件/opt/svn/conf/pwd.conf。如有必要,也可以分開。文件中定義用戶組和版本庫目錄權限。注意:
* 權限配置文件中出現的用戶名必須已在用戶配置文件中定義。
* 對權限配置文件的修改立即生效,不必重啟svn。用戶組格式:
[groups]
<用戶組名> = <用戶1>,<用戶2>
其中,1個用戶組可以包含1個或多個用戶,用戶間以逗號分隔。版本庫目錄格式:
[<版本庫>:/項目/目錄]
@<用戶組名> = <權限>
<用戶名> = <權限> 其中,方框號內部分可以有多種寫法:
/,表示根目錄及以下。根目錄是svnserve啟動時指定的,我們指定為/opt/svndata。這樣,/就是表示對全部版本庫設置權限。
repos1:/,表示對版本庫1設置權限
repos2:/occi, ,表示對版本庫2中的occi項目設置權限
repos2:/occi/aaa, ,表示對版本庫2中的occi項目的aaa目錄設置權限 權限主體可以是用戶組、用戶或*,用戶組在前面加@,*表示全部用戶。權限可以是w、r、wr和空,空表示沒有任何權限。示例:
[groups]
admin = alan[/]
@admin = rw[repos1:/occi/aaa]
king = rw[repos2:/pass]
king =
刪除無用文件:
rm /opt/svndata/repos1/conf/authz
rm /opt/svndata/repos1/conf/passwd
rm /opt/svndata/repos2/conf/authz
rm /opt/svndata/repos2/conf/passwd
3. 啟動svn
建立啟動svn的用戶:
useradd svn
passwd svn
根據提示為用戶svn設置密碼允許用戶svn訪問版本庫:
chown –R svn:svn /opt/svndata
chown –R svn:svn /opt/data啟動svn:
su - svn -c "svnserve -d --listen-port 9999 -r /opt/svndata"
其中:
su – svn表示以用戶svn的身份啟動svn
-d表示以daemon方式(后臺運行)運行
--listen-port 9999表示使用9999端口,可以換成你需要的端口。但注意,使用1024以下的端口需要root
權限
-r /opt/svndata指定根目錄是/opt/svndata檢查:
ps –ef|grep svnserve如果顯示如下,即為啟動成功:
svn 6941 1 0 15:07 ? 00:00:00 svnserve -d --listen-port 9999 -r
/opt/svndata參考資料:
http://www.gbunix.com/htmldata/2006_07/15/27/article_1337_1.html
http://www.iusesvn.com/bbs/thread-157-1-1.html
http://16hot.blog.isyi.com/post/1/552
檢測服務是否開啟:netstat -ntlp如果看到3690的端口正常開放了,證明SVN啟動了。]
下面是機器上的端口顯示:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 0 0 0.0.0.0:32769 0.0.0.0:* LISTEN
2611/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
2591/portmap
tcp 0 0 0.0.0.0:113 0.0.0.0:* LISTEN
2827/xinetd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
4860/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
2846/sendmail: acce
tcp 0 0 :::3690 :::* LISTEN
5513/svnserve
tcp 0 0 :::22 :::* LISTEN
2812/sshd
下面這個就是了:
tcp 0 0 :::3690 :::* LISTEN
5513/svnserve
好了,svn已經架起來了
在 Linux/Apache 2.2 上配置SVN服務器
準備,下載所需要文件.
檢查已安裝的 Apache2 是否已經安裝了 mod_dav .
編譯SVN,遇到的問題和解決方法
使用 默認文件系統(fsfs) 保存數據
使用 Berkeley DB 保存數據
配置Apache和SVN,測試.
其它小結
從Windows平臺上數據轉移
配置文件,使用其支持對文件中的 $Id$ 標簽每次提交的時候自動更新版本信息.
基于路徑的權限控制常用SVN命令
相關資源* 準備,下載所需要文件.
本文測試環境:ubuntu 6.06 LTS (kernel 2.6.15-25-k7,gcc-4.0.3) /ubuntu server (2.6.15-26-
server,gcc-4.0.4)
Subversion 1.3.2Apache 2.2.2最新的版本 Subversion 可以在這里找到 :
http://subversion.tigris.org/project_packages.html* 檢查已安裝的 Apache2 是否已經安裝了
mod_dav .
如果已經成功安裝了Apache,使用 httpd -M 來查看有沒有安裝 dav_module,如果沒有的話 必須附加
‘–enable-dav’ ‘–enable-dav-fs’ 兩個參數重新編譯 Apache,否則即使編譯通過了svn,apache也
會啟動不起來.如何編譯 Apache 請參考我另外一篇文章.* 編譯SVN,遇到的問題和解決方法.
使用默認的文件系統保存數據.
最終完整通過安裝和測試的編譯參數為:./configure --with-apxs=/usr/local/apache2/bin/apxs \
--with-apr=/home/src/server/httpd-2.2.2/srclib/apr \
--with-apr-util=/home/src/server/httpd-2.2.2/srclib/apr-utilmake
make install其中 /home/src/server/ 為 httpd-2.2.2 源代碼所在文件夾,根據實際情況調整一下.◆
遇到問題:1) --with-apr 和 --with-apr-util 如果沒有加上的話,即使編譯成功了也會出現Can't set position pointer in file ‘/home/svn/repos/db/revs/0′: Invalid argument
這樣的錯誤提示.2) 暫時不能使用 Berkeley DB [* 已解決]svn保存文件更新數據庫的方法有兩個,一種是直接使用 fs (filesystem)來保存,另一種是通過Oracle提供支持的開源數據庫 Berkeley DB 進行保存。但是如果加上 –with-berkeley-db=/usr/local/BerkeleyDB.4.4 就會configure時就會報錯.configure: error: APR-UTIL was installed independently, it won’t be possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4我想 apr-unit 暫時不支持吧,我們就用默認的fs好了.3) 在make 的時候可能會遇到缺少 srclib/apr/libapr-1.la,srclib/apr-util/libaprutil-1.la 兩個文件,找不到而make error.解決辦法:/usr/local/apache2/lib/ 中找到,將其復制到源代碼文件夾相應的位置中.Update!!使用 BerkeleyDB 保存數據.
1) 安裝 BerkeleyDBcd /usr/local/src
wget http://downloads.sleepycat.com/db-4.3.29.tar.gztar xzvf db-4.3.29.tar.gz
cd /usr/local/src/db-4.3.29/build_unix
../dist/configure --enable-compat185
make
make install2) 更新apr和apr-util源代碼# 清理編譯后的.la文件
cd /usr/local/src/httpd-2.2.3make cleancd /usr/local/src/subversion-1.3.2
rm -rf apr
rm -rf apr-util
cp -rf /usr/local/src/httpd-2.2.3/srclib/apr ./
cp -rf /usr/local/src/httpd-2.2.3/srclib/apr-util/ ./3) 編譯安裝./configure --with-
apxs=/usr/local/apache2/bin/apxs \
--with-berkeley-db=/usr/local/BerkeleyDB.4.3 \
--with-ssl
make
make install
◆ 遇到問題:
1) BerkeleyDB 版本不能大于 4.3.否則同樣會出現以下錯誤.configure: error: APR-UTIL was
installed independently, it won’t be
possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4
主要是apr-util 暫時不支持4.4的版本.2) 必須更新apr,apr-util 源代碼.
subversion-1.3.2 自帶的 apr-util 的版本是0.9.6的,必須升級為 1.2.7 雖然能編譯過去。但在 svn
checkout 的時候會提示svn: REPORT request failed on ‘/!svn/vcc/default’
svn: REPORT of ‘/!svn/vcc/default’: Could not read status line: connection was closed by
server.
這個問題困擾了我很長時間,Google和官方論壇都無結果。后來昨天竟然自己無意中解決了,感動的得哭了:)* 配置Apache和SVN,測試
成功編譯svn后會在 httpd.conf 中自動加上LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
兩個模塊,沒有的話,自行加上或檢測是否真的編譯成功.假設我們現在要將一個名為 Lair 的項目導入
到 SVN中1). Apache的配置在 conf/httpd.conf 或 conf/extra/httpd-vhosts.conf 中加入
<Location /svn/Lair>DAV svn
SVNPath /home/svn/Lair
</Location>
可以參考以下apache的配置,實現數據加密傳輸,用戶身份驗證.Listen 443AddType
application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl.SSLPassPhraseDialog exec:/etc/sendsslpwd
SSLSessionCache shmcb:/usr/local/apache2/logs/ssl_scache(512000)
SSLSessionCacheTimeout 300
SSLMutex file:/usr/local/apache2/logs/ssl_mutex<VirtualHost _default_:443>
DocumentRoot /var/SVNRoot
ServerName svn.yousite.com:443
ServerAdmin webmaster@yousite.com
<Location />DAV svn
SVNPath /var/SVNRoot
AuthzSVNAccessFile /etc/svnserve.conf
Satisfy Any
AuthType Basic
AuthName “yousite SVN Repository”
AuthUserFile /etc/httpd-passwords.txt
Require valid-user</Location>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/ssl/server.crt
SSLCertificateKeyFile /etc/ssl/server.key</VirtualHost>更詳細的配置說明文檔
http://svnbook.red-bean.com/nightly/en/svn.ref.mod_dav_svn.conf.html2). 配置,并且測試SVN,創建一個新用戶,用了保存倉庫.
useradd -m svn
創建一個新模塊su daemon (apache是以daemon用戶運行的,所以要切換身份,否則可能會報目錄訪問權限錯誤)
svnadmin create --fs-type fsfs /home/svn/Lair
導入原來的項目svn import /var/www/Lair http://localhost/svn/Lair -m ‘Initial import’重新建
立工作目錄rm -rf /var/www/Lair (注意備份!!)
svn checkout http://localhost/svn/Lair
測試打開 http://localhost/svn/Lair如能看到一個你項目錄列表,說明您成功了。
* 其它小結
數據轉移:從 Windows 平臺 SVN 服務器轉移
如果windows svn儲存的格式也是dbd的話,直接將SVN的文件夾copy過來即可.然后
執行 svnadmin recover /var/SVNRoot 檢查一下數據庫是否損壞.最后注意權限,確保 db 目錄下的所有
文件可寫。chmod 755 db
chmod 666 db/*
否則checkout時出現以下錯誤,多數是因為文件或者目錄權限問題引起的,可以嘗試用 chown 或者
chmod 命令修改一下權限<m:human-readable errcode=”160029″>Could not open the requested SVN
filesystem
</m:human-readable><m:human-readable errcode=”13″>
Could not open the requested SVN filesystem
</m:human-readable>另外一種方法沒有測試過,原理大致和mysqldump一樣,將svn導出為文本文件,然
后重新導入,好處是可以避免因為存儲格式不同而導致的數據轉移困難。# dump data to file
(assuming a repo @ c:\repo):svnadmin dump c:\repo > c:\repo.txt
# Copy the file over to linux:
mkdir /repo
svnadmin create /repo
svnadmin load /repo < /repo.txt
設置訪問控制當 httpd.conf 中 設置 AuthzSVNAccessFile 時,
可以設置不同用戶對不同目錄的訪問控制.以下是一個例子.[groups]
root = admin.root
web = user1,user2
soft = user3,user4[/]
@root = rw[/www]@web = rw[/soft]
@soft = rw詳細的說明文檔:http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html
配置文件,使用其支持對文件中的 $Id$ 標簽每次提交的時候自動更新版本信息(自動屬性).Windows
: C:\Documents and Settings\%USERNAME%\Application Data\Subversion\config
Linux : ~\.subversion\config[miscellany]enable-auto-props = yes
[auto-props]
*.php=svn:keywords=Id
*.html=svn:keywords=Id>> 關于自動屬性的更高級討論■ 幾條常用svn 命令
svn update
svn add “filename”
svn commit———————–
Change Log:2006-08-14 neon庫subversion已經自帶,不需要在單獨安裝,添加-with-ssl即可使用svn對ssl支持.
2006-08-10 補充自動屬性的說明.
2006-08-08 加入關于目錄訪問驗證的說明.
2006-08-07 httpd,2.2.3測試依然有效,解決bdb數據庫的支持問題,添加從Windows到Linux下的數據轉移方案。
2006-07-25 看到到.聲仔對 Can’t set position pointer in file 另一種解決方案,我當時也測試了,好像沒有成功。不想用apache源代碼編譯的朋友可以也測試一下