1. 程式人生 > >svn(svnsync)實時同步備份及問題解答

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個問題的,歡迎告知我!