svn(svnsync)實時同步備份及問題解答
公司有一臺svn伺服器,最近想用另一臺svn伺服器做個實時備份。從網上查了不少資料,也遇到過各種吐血的問題,在這裡記錄一下。
1.兩臺機器(一臺源庫,一臺目標備份庫)。
2.通過目標機器上的VisualSvnserver 上直接建立一個新的倉庫:test
3.然後在目標目錄機器上我的是在E:/Repositories/test/hocks 目錄中新建
pre-revprop-change.bat 全部內容只有一行:exit0
4.執行 初始化 (這個操作在源庫所在伺服器的VisualSvnserver安裝目錄下的bin目錄下cmd執行,要不然會提示svnsync不是內部或者外部命令)
cd C:\Program Files (x86)\VisualSVN Server\bin
svnsync init https://192.168.11.164/svn/test file:///C:/Repositories/repos
其中 https://192.168.11.164/svn/test 為目標源svn庫地址,file:///C:/Repositories/repos為源svn庫地址
執行後,會出現選擇項讓你選擇,輸入t(接受)即可。
回車後,會出現一個Administrator的使用者名稱。然後讓你輸入密碼。這個不用理會,直接回車即可。
然後將向你詢問登入目標庫和源庫的使用者名稱和密碼,建議為兩個庫設定相同的使用者名稱及相同的密碼(此處為svn使用者名稱和密碼)。
正確後,顯示
Copied properties for revision0.
如不正確:
注意!這個地方可能會出現一個錯誤(SSL handshake failed: SSL error:Key usage violation in certificate has been detected.)意思是說握手失敗,證書無法檢驗
解決方案:
我用的是win7 64位的系統。
A.首先修改登錄檔。輸入regedit命令,進入登錄檔
B.找到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\VisualSVN\VisualSVN Server目錄,新建一個"CreateGnuTLSCompatibleCertificate"=dword:00000001
C.開啟VisualSVN Server Manager,在操作(Action)下點選Properties->Certificate-> Change certificate,然後下一步下一步就可以了
D.如果還是不行的話,就改變一下登陸的方式,勾選https,再勾選http。然後登陸,就可以解決問題了。
5.執行同步 (這個操作在源庫所在伺服器的VisualSvnserver安裝目錄下的bin目錄下cmd執行,要不然會提示svnsync不是內部或者外部命令)
svnsync sync https://192.168.11.164/svn/test (目標庫)
正確執行後,顯示
Committed revision 1.
Copied properties for revision 1.
.......
注意!因為本身我源庫的svn裡有不少的專案,特別大,所以執行的時間比較長,而且中間會出現上面ssl的錯誤。正常的話繼續執行同步就行。但是我是重複同 步了好多次, 始終有一個檔案太大,每次都失敗,所以我又搜了不少的文件,用了另外的一種方法執行同步。下面就介紹一下這種方法
1.將之前已經初始過的目標庫test目錄下的hooks(鉤子)資料夾,db/revprops/0/0 檔案和db/uuid 這三個進行備份
2.將源庫的C:/Repositories/repos 資料夾壓縮後解壓到目標庫test目錄下,同時將上面的三個檔案替換源庫的檔案
3.執行svnsync sync https://192.168.11.164/svn/test (在源庫執行)
4.如果提示版本號對應不上,那麼執行下面的命令
svn propset --revprop -r0 svn:sync-last-merged-rev 5515 C:/Repositories/repos 其中5515為你拷貝時的版本號
5.執行svnsync sync https://192.168.11.164/svn/test ,成功!
6.在源庫伺服器上源庫的hooks中建立
post-commit.bat 檔案
輸入
svnsync sync --non-interactive https://192.168.11.164/svn/test--sync-username svn使用者名稱 --sync-password svn密碼 (前面建議過,最好兩臺伺服器svn賬戶密碼一樣,這樣操作起來方便)
這樣在本地向源庫伺服器svn提交資料時,就會自動同步到目標庫!
此處我還遇到兩個問題:
1.執行這個bat檔案時,每次都詢問是否接受證書,解決方法是在先去掉bat檔案中 -non-interactive 執行,然後詢問的時候選擇p,加入快取,這樣下次就不會再詢問了。執行完之後再把-non-interactive 加上
2.這個問題是最坑爹的。我在源庫裡是可以執行同步 的。但是在本地提交程式碼的時候會出現證書無法檢驗!查了很多文件都沒有解決。最後我是在源庫伺服器上增加了一個定時任務去執行這個bat檔案,這樣就不是實時同步了,而是定時同步,不過效果差不多
大家如果有解決第2個問題的,歡迎告知我!