在做遷移操作前,請停止對svn進行提交操作。
1. 遷移方案(采用dump -load方案):
源SVN服務器:192.168.1.200,Windows服務器
目標SVN服務器:192.168.1.201,Windows服務器。采用CollabNet Subversion Server,假定subversion安裝在D:\Program Files\CollabNet Subversion Server上,SVN的Repository為d:\Subversion\svnbackup
也即Windows服務中,可執行文件的路徑為:
“d:\Program Files\CollabNet Subversion Server\svnserve.exe” –service -r “d:\Subversion\svnbackup” –listen-port “3690″
由于目前在subversion服務器上實際上只有svn://192.168.1.200/rd目錄下才有內容,因此只需要遷移svn://192.168.1.201/rd下的內容,步驟如下:
1、 在源服務器192.168.1.200上執行dump操作
注意此處實際上把repository中所有的目錄都備份了,需要在load時候采用svndumpfilter命令過濾需要的目錄。
svnadmin dump D:\Subversion\svnworkspace\bak >svn_all_20080520.dump
2、 在192.168.1.201上創建svnbackup Repository
svnadmin create d:\Subversion\svnbackup
3、 下載一個windows 版本gnu 工具(例如http://sourceforge.net/projects/gnuwin32/),主要是使用cat方法
4、 將dump文件拷貝到上并執行load操作
cat svn_all_20080520.dump | svndumpfilter --include:rd >svn_rd_20080520.dump
5、 執行svnadmin load
svnadmin load d:\Subversion\svnbackup < svn_rd_20080520.dump
6、 在192.168.1.201上配置svnserve.conf、passwd、authz文件
2. 遷移方案(采用svnsync方案)
從subversion 1.4.4開始,提供了svnsync命令,可用于Subversion的庫遷移和備份,這里我們用于備份操作的初始化同步。
假定從源服務器192.168.1.201備份到192.168.1.88
SVN服務器:192.168.1.201,Windows服務器,采用CollabNet Subversion Server,假定subversion安裝在D:\Program Files\CollabNet Subversion Server上,SVN的Repository為d:\Subversion\svnbackup。
備份服務器: 192.168.1.88,Redhat As 4服務器
采用svnsync進行數據遷移,方法如下:
1、 在備份服務器192.168.1.88上創建源服務器192.168.1.201上對應的備份庫目錄
mkdir /opt/subversion
svnadmin create /opt/subversion/svnbackup
2、在備份服務器192.168.1.88上啟用鉤子文件
cd /opt/subversion/svnbackup/hooks
echo “#!/bin/sh”> pre-revprop-change
chmod 755 pre-revprop-change
3、在備份服務器192.168.1.88上運行svnsync init命令
svnsync init file:////opt/subversion/svnbackup svn://192.168.1.201 –username username –password password
注意,svnsync的語法為:svnsync init DEST SOURCE
4、在備份服務器192.168.1.88上執行同步操作
svnsync sync file:////opt/subversion/svnbackup
由于svnsyc只能同步整個svn庫,并不能同步指定的項目,因此建議遷移時候使用dump-load方案,備份時候采用svnsync方案
3. 備份方案:
為保證svn服務器的安全,由腳本每天定時對svn庫進行備份,以保證svn庫的安全性。備份仍然采用svnsync來完成。
1. 在192.168.1.88 上安裝subversion 服務器端
2. 在192.168.1.88上創建備份用戶帳號svnsync,以供192.168.1.201能夠以此帳號實時把變更的同步到192.168.1.88上
配置文件svnserve.conf:
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
配置文件passwd:
svnsync=svnsync
配置文件authz
[groups]
developer = svnsync
[/]
@developer=rw
* =
3. 在備份機上開啟iptables的3690端口
4. 在備份機192.168.1.88上創建備份庫目錄
svnadmin create /opt/subversion/svnbackup
chown –R svnsync:svnsync /opt/subversion/svnbackup
5. 按照上述采用svnsync方案的步驟,將庫同步到192.168.1.88上,初始化svn庫
cd /opt/subversion/svnbackup/hooks
echo “#!/bin/sh”> pre-revprop-change
chmod 755 pre-revprop-change
svnsync init file:////opt/subversion/svnbackup svn://192.168.1.201 –username username –password password
svnsync sync file:////opt/subversion/svnbackup
6. 在源服務器192.168.1.201上,創建鉤子文件,保證192.168.1.201上的變動實時同步到192.168.1.88上:
post-commit
# Propagate the data to the remote repository
D:\Program Files\CollabNet Subversion Server\svnsync synchronize --username svnsync --password svnsync svn:// 192.168.1.88
post-rev-changes
# Propagating changes to the remote repository.
D:\Program Files\CollabNet Subversion Server\bin\svnsync copy-revprops --username svnsync --password svnsync svn:// 192.168.1.88 $REV
4. 參考文檔:
http://whynotwiki.com/How_I_moved_my_code_repository_to_Google_Code
原文:http://www.yeeach.com/2008/05/20/subversion%E5%BA%93%E8%BF%81%E7%A7%BB%E5%8F%8A%E5%A4%87%E4%BB%BD%E6%96%B9%E6%A1%88/