如用svnsync 同步備份兩臺機器的svn 。(就以linux服務器到windows服務器為例子)
要同步的項目名稱:source_svn
svn 版本庫1 。4 以上
源目錄: svn://192.168.16.199/source_svn
同步目標目錄: http:// 目標IP:8080/source_svnbak
方法:
1.如果目標目錄存在相同的項目,請先清除,重新建立空項目
2.在目標服務器中建立svn版本庫source_svnbak svnadmin create source_svnbak (svnadmin是svn的命令如果沒有將svn目錄放到環境變量需要在其目錄里面使用該句若是windows可以直接點擊右鍵創建svn)
3.需要在hooks中將pre_revprop_change.tmpl改為pre_revprop_change.bat并將內容清空然后輸入exit 0
4.執行初始化
svnsync init svn://目標:ip:端口號/source_svnbak svn://192.168.16.199/source_svn
(執行到這一般會出現一個問題 svnsync: 認證失敗)解決:需要把源文件source_svn中的conf拷貝到目標source_svnbak中替換conf文件
如果成功他會提示你輸入用戶名和密碼(注:第一個是Administrator這個我覺得不用管隨便輸入,確定后才是你svn中填寫的用戶名和密碼在conf中的文件有配置)
正確后,顯示
Copied properties for revision 0.(復制版本 0 的屬性。)
5
執行同步
svnsync sync svn://目標ip和端口號/source_svnbak --username xxxx --password xxxx(一般端口號不用寫除非端口號不是默認安裝過的需要寫,用戶名和密碼都在conf中有配置)
即svnsync sync 目標庫
正確執行后,顯示
復制版本號和提交數據等信息
6.更新同步
在source_svn的hooks下面,添加post-commit 腳本
可拷貝post-commit.tmpl
即
cp post-commit.tmpl post-commit
然后
把 post-commit 中,最后兩行替換為
svnsync sync --non-interactive svn://目標ip:(端口號)/source_svnbak --username xxx --password xxx
即提交更新后,即執行同步命令,不進行交互
把post-commit 設為755權限。
ps:
如果post-commit腳本出錯,或者無可執行權限,在提交更新時會報錯
錯誤處理 :
在源端 , 同步用的帳號需要有讀權限 , 在目的端同步帳號需要讀寫權限 . 權限分配合理后 , 基本上就不會出現其他錯誤 .
如果出現以下列出的之外的錯誤 , 請先檢查一下 svn 服務是否可正常使用 .
比較常見的錯誤是 :
# svnsync initialize DEST_URI SRC_URI --username cax --password password_for_cax
svnsync: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent
svnsync: At least one property change failed; repository is unchanged
這是由于系統中沒有 pre-revprop-change 鉤子腳本導致的 , 該文件在版本庫的 ~/hooks/ 下 , 只需拷貝一份即可 .
cp -pf hooks/pre-revprop-change.tmpl hooks/pre-revprop-change
如果是 windows 系統 , 還需要清空 pre-revprop-change 的內容 , 并添加后綴為 pre-revprop-change.bat
在批處理文件中 , Linux 下 shell 中注釋符 # 不能被 batch 正確解釋也會重復出現該錯誤 .
來源:http://blog.csdn.net/stuartjing/article/details/6796763
文章列表