====== SVN 檔案庫同步 ====== 來源:http://blog.jostudio.net/2007/06/svn.html 在新版的SVN提供了SVNSYNC的程式\\ 可以達成兩個檔案庫之間的同步\\ 他可以經由遠端來運作 因此可以備份到不同電腦上\\ 另外在備份之前不需要刪除舊有資料 因為他是同步\\ 在Subversion的官網上雖然有文章介紹如何使用\\ 不過是針對Linux的環境下的說明...\\ 那在Windows雖然很類似 不過要作一些修改\\ 首先 要建立同步目標的檔案庫\\ svnadmin create DestRepository 然後設定DestRepository的Conf檔跟建立一個新的帳號 (例如"SvnSync")\\ 並在來源檔案庫新增一筆一樣的帳號密碼\\ 並且在hooks的目錄下建立一個新的檔案叫\\ "pre-revprop-change.bat"\\ 檔案內容使用空白即可運作\\ 不過這一個目標檔案庫有一個限制 他不應該被一般使用者Commit資料上去\\ 也就是說應該只有svnsync可以對他作寫入的動作\\ 應此建議將檔案內容修改為下列所述\\ @echo off set repos=%1 set rev=%2 set user=%3 set propname=%4 set action=%5 if not '%user%'=='SvnSync' goto ERROR_USERNAME exit 0 :ERROR_USERNAME echo Only allow user SvnSync. >&2 exit 1 此動作是檢查使用者帳號是否為SvnSync (大小寫有分)\\ 如果要不分大小寫 請將此行改為\\ if /I not '%user%'=='SvnSync' goto ERROR_USERNAME 接下來要對此檔案庫做初始化的動作 讓他知道要跟哪個來源作同步\\ svnsync init --username SvnSync --password XXX 目標檔案庫位址 來源檔案庫位址 實際試過, 若要同步遠端SVN且容量很大時, 可將Repository複制到本機, 再執行 init, 但須加 --allow-non-empty svnsync init --username SvnSync --password XXX --allow-non-empty 目標檔案庫位址 來源檔案庫位址 這一個命令的目標跟來來源都是使用位址 因此可以使用本地端或是遠端路徑\\ 例如 svnsync init --username SvnSync --password XXX file:///E:/SVNBackup/DestRepository svn://SVNServer/SourceRepository 注意 本地端位置中斜線的方向跟數量\\ 最後就是同步的動作\\ svnsync sync --username SvnSync --password XXX 目標檔案庫位址 同樣的 我們可以寫一些批次檔來達成自動化的目的\\ 方式是在來源檔案庫的hooks的目錄下 建立一個新檔案叫做\\ "post-commit.bat"\\ 他會在來源檔案庫接受每一次的Commit之後啟動 內容為下\\ @echo off svnsync sync --non-interactive --username SvnSync --password XXX svn://SVNServer2/DestRepository 這邊是備份到跟來源檔案庫不同的Server上\\ 可以依據每個人不同的需求作更動...\\ 結論是 新的1.4版中的svnsync實在很好用\\ 不過前提示 要先把伺服器換成1.4版或以後的版本\\ 並且 目標檔案庫必須是使用1.4版以後的svnadmin所建立的\\ 另外可以發現 寫一些批次檔放進hooks目錄中\\ 可以達成蠻多功能的 有興趣可以網路上搜尋一下文章看看\\ 希望此文章對有使用SVN並架設在Windows上的人有一些幫助\\ update\\ 如有遇到同步失敗, 或是不同Thread同時要進行同步造成鎖定而錯誤\\ 可使用下列指令解決鎖定\\ svn propdel svn:sync-lock --revprop -r 0 目標檔案庫位址