SVN 服務器和客戶端安裝
安裝服務器程序
運行服務端程序VisualSVN-Server-2.1.5.msi,根據提示安裝即可,這樣我們就有了一套在服務器端運行的環境。
安裝客戶端程序
運行TortoiseSVN_1.6.2.16344.msi按照提示安裝即可,不過最後完成後會提示是否重啓,其實重啓只是使svn工作拷貝在windows中的特殊樣式生效,與所有的實際功能無關,這裏爲了立刻看到好的效果,還是重新啓動機器。
安裝客戶端語言包
運行LanguagePack_1.6.2.16344-win32-zh_CN.msi
注意:上述服務端和客戶端程序均爲開源軟件,在使用過程中注意兩者版本的統一。
SVN 創建版本庫
多庫管理模式
SVNROOT爲版本庫的根目錄,“文檔”爲文檔管理版本庫、sourcecode爲各系統代碼管理版本庫。
VisualSVN-Server提供了一個可視化的控制檯,通過它我們可以方便的完成版本庫的創建和權限的分配工作。
1. 啓動VisualSVN Server Manager,在VisualSVN Servers上右鍵選擇Properties
2. 在彈出的界面上設置版本庫的根位置,設置完畢後會重新啓動相關服務
3. 在VisualSVN Servers上右鍵選擇Creat New repository ,創建新的版本庫,並在文本框中輸入庫名稱
上圖中的CheckBox如果選中,則在庫test下面會創建trunk、branches、tags三個子目錄;不選中,則只創建空的版本庫test。
(注:VisualSVN Server Manager不支持對目錄下文件的創建和刪除操作,這項工作需要藉助Tortoise SVN來完成)
SVN 安全配置
用戶設置
1. 啓動VisualSVN Server Manager,右鍵點擊界面上的Users文件夾,選擇create user
2. 在彈出的Users設置界面上添加新的用戶和密碼:
用戶組設置
1. 在VisualSVN Server Manager上右鍵點擊界面上的Groups文件夾,選擇create Group
2. 在彈出的Gruop設置界面上添加新的組和組成員
安全性設置
1. 在版本庫中選擇一個庫,右鍵選擇Properties
2. 點擊上圖中的"Add..."按鈕,在下圖中選擇我們剛纔添加的用戶,點擊OK按鈕
3. 按照下圖所示,分別對用戶或組進行授權
在線修改密碼
1. 在安裝目錄(如C:\Program Files\VisualSVN Server\)的bin文件夾下增加alias.so、mod_cgi.so兩個文件
2. 在安裝目錄中增加cgi-bin文件夾,其中包含svnpass、svnpass.ini兩個文件,修改svnpass.ini中pwdFilePath地址的指向爲版包庫中密碼存放的文件,例如:pwdFilePath=D:\Repositories\htpasswd
3. 修改安裝目錄中conf文件夾中的httpd-custom.conf,增加如下內容:
LoadModule alias_module bin/mod_alias.so
LoadModule cgi_module bin/mod_cgi.so
<IfModule alias_module>
ScriptAlias /cgi-bin/ "C:/Program Files/VisualSVN Server/cgi-bin/"
</IfModule>
4. 修改安裝目錄中htdocs文件夾的部分內容
注意:上述所需文件參見SVN中相關附件
5. 用戶通過URL訪問版本庫,在驗證通過後就能完成密碼的在線修改
備份恢復機制
4.1. 備份策略
出於資源安全性考慮,爲了防止由於配置管理服務器硬件或者軟件故障,而導致配置庫資源丟失且無法恢復的情況發生,需要對配置庫資源進行定期的備份。這裏採用的備份策略爲“定期大備份,時時小備份”,即定期對配置庫根目錄下的所有配置庫資源進行整體備份,而對各配置庫而言,如果庫內資源發生了有效修改(即對資源進行了修改併成功進行了提交操作),則僅對發生修改的信息內容進行備份。下面分別對“定期大備份”和“時時小備份”的實現進行描述。
“定期大備份”的實現步驟
最常見和簡單的備份就是直接使用拷貝命令,將版本庫目錄拷貝到備份目錄上就可以了.但是這樣不是很安全的方式,因爲如果在拷貝時版本庫發生變化,將會造成備份的結果不夠準確,失去備份的作用,爲此使用提供的“svnadmin hotcopy”的命令,可以防止這種問題。
例如:有如下的SVN版本庫
D:\ Repositories
├─SMS
│ ├─conf
│ ├─dav
│ ├─db
│ │ ├─revprops
│ │ ├─revs
│ │ └─transactions
│ ├─hooks
│ └─locks
└─SSOcrbt
├─conf
├─dav
├─db
│ ├─revprops
│ ├─revs
│ └─transactions
├─hooks
└─locks
現在將SMS 備份到E:\Repositories_back目錄下,只需要運行:
svnadmin hotcopy D:\Repositories\SMS E:\ Repositories_back\SMS
實現腳本
1. 編寫Backup.bat批處理文件
echo off
#rem Subversion的安裝目錄
set SVN_HOME="C:\Program Files\VisualSVN Server"(=右邊爲VisualSVN Server的安裝路徑,請根據實際情況修改請根據實際情況修改)
#rem 所有版本庫的父目錄
set SVN_ROOT=D:\Repositories\(=右邊爲配置庫根目錄所在路徑,請根據實際情況進行修改)
#rem 備份的目錄
set BACKUP_SVN_ROOT=E:\Repositories_back (=右邊爲備份文件存儲路徑,要根據實際情況,先建立好存儲文件夾)
set BACKUP_DIRECTORY=%BACKUP_SVN_ROOT%\%date:~0,10%
if exist %BACKUP_DIRECTORY% goto checkBack
:startBack
echo 建立備份目錄%BACKUP_DIRECTORY%>>% BACKUP_SVN_ROOT %/backup.log
mkdir %BACKUP_DIRECTORY%
#rem 驗證目錄是否爲版本庫,如果是則取出名稱備份
for /r %SVN_ROOT% %%I in (.) do @if exist "%%I\conf\svnserve.conf" %SVN_ROOT%\Simplebackup.bat "%%~fI" %%~nI
goto end
:checkBack
rd /s /q %BACKUP_DIRECTORY%
goto startBack
:end
2. 編寫Simplebackup.bat批處理文件
@echo 正在備份版本庫%1......
@%SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_DIRECTORY%\%2
@echo 版本庫%1成功備份到了%2!
goto clean
:clean
del /Q %BACKUP_SVN_ROOT%\ModifiedBackup\*.dump
goto end
:end
3. 將編寫好的Backup.bat和Simplebackup.bat批處理文件放到配置庫根目錄下(這裏是D:\Repositories),測試程序能否成功執行,進入配置庫根目錄後雙擊文件Backup.bat,然後進入備份目錄D:\SvnBackup查看配置庫根目錄下的所有配置庫是否都得到了備份,備份日誌是否輸出正確,如果這兩點都通過,則說明程序沒有問題了,如圖:
4. 將文件Backup.bat的執行放到系統任務計劃中,使得備份能夠定期自動的進行。點擊“開始”->“控制面板”->“任務計劃”->“添加計劃任務”打開“任務計劃嚮導”窗口,如圖:
5.點擊“下一步”按鈕,進入下一窗口,點擊“瀏覽”按鈕,在彈出的“選擇程序以進行計劃窗口”選擇配置庫根目錄下的Backup.bat文件進行添加,如圖:
6.進入下一窗口後可以設置添加的該任務名稱和任務執行的間隔時間類型,如果任務名稱和程序名相同,設置每週執行一次備份的話,如圖
7.點擊“下一步”按鈕,進入下一窗口設置任務執行的起始時間和起始日期,間隔時間類型選擇不同的話,該窗口顯示的內容也不同。這裏設置每週五的13:00執行任務,如圖:
8.點擊“下一步”按鈕,設置任務執行時需要的用戶名和密碼,用戶名採用默認即可(默認爲本機Administrator用戶),密碼輸入本機Administrartor用戶的登陸密碼,如圖
9.點擊“下一步”按鈕,再在下一窗口中點擊“完成”按鈕,就完成了此項計劃任務的添加。這樣系統就可以根據設置的計劃任務信息,自動地進行配置庫的備份操作了,因爲“定期大備份”是對所有配置庫最新版本的整體備份,所以每次進行時,會自動刪除上次大備份之後的所有“時時小備份”。
“時時小備份”的實現步驟
1. 編寫post-commit.bat批處理文件
echo off
set SVN_HOME=C:\Program Files\VisualSVN Server(=右邊爲VisualSVN Server的安裝路徑,請根據實際情況修改請根據實際情況修改)
set SVN_ROOT=D:\Repositories(=右邊爲配置庫根目錄所在路徑,請根據實際情況進行修改)
set SVN_MODIFIED_BACKUP_ROOT=E:\Repositories_back\ModifiedBackup(=右邊爲備份文件存儲路徑,要根據實際情況,先建立好存儲文件夾)
set LOG_FILE=%SVN_MODIFIED_BACKUP_ROOT%\ModifiedBuckup.log
echo 增量備份配置庫版本 %2 所作的修改 >> %LOG_FILE%
cd C:\Program Files\VisualSVN Server\bin
svnadmin dump D:\Repositories\SMS(=右邊爲時時備份的配置庫) --incremental --revision %2 >> E:\Repositories_back\ModifiedBackup\Dev.dump
goto end
:end
2. 將編寫好的post-commit.bat批處理文件放到對應配置庫的hooks目錄下(這裏是D:\Repositories\test\hooks)
3. 測試“時時小備份”是否實現,在SVN的本地工作空間中,對實現了“時時小備份”的配置庫的內容進行修改並提交,然後進入對應的備份目錄中(此處爲E:\Repositories_back\ModifiedBackup)檢查是否輸出了備份文件(此處爲Dev.dump)和備份日誌(此處爲ModifiedBuckup.log)。如果這兩者都存在,說明備份成功了。
4. 對於配置庫根目錄下的每個配置庫都應該進行上述操作,以使每個配置庫都能實現“時時小備份”的功能。
配置庫備份的還原
由於配置庫的備份有“定期大備份”和“時時小備份”兩種方式,所以備份數據的還原策略也有如下兩種:
1. 如果進行了“定期大備份”後,配置庫根目錄下的所有配置庫內容均未發生過有效修改,(也就是“時時小備份”的備份目錄下麼有備份的數據文件),此時還原備份時間最近的大備份的備份數據文件即可,方法如下:點擊“開始”->“所有程序”->“VisualSVN Server”啓動VisualSVN Server 可視化控制面板,選中配置庫根目錄節點“Repositories”,點擊鼠標右鍵選擇“所有任務”->“Import Existing Repository…”,打開“Import Existing Repository”窗口,在該窗口的“Existing Repository Location”輸入框輸入要導入的配置庫備份文件路徑(或者點擊“Browse”按鈕進行瀏覽選擇),然後在“New Repository Name”輸入框輸入新的配置庫名稱,操作後結果如下圖
點擊“ok”按鈕,完成備份數據庫的還原。(每個配置庫備份都要進行如上操作)2. 如果在進行“定期大備份”之前,配置庫根目錄下的某些配置庫內容發生了有效修改,則先要將發生了內容修改的配置庫的修改備份(小備份.dump)合併到最近的整體備份(大備份)中,合併方法是執行批處理文件Merger.bat,文件內容如下:
cd C:\Program Files\VisualSVN Server\bin svnadmin load E:\Repositories_back\2010-06-01\SMS < E:\Repositories_back \ModifiedBuckup\Dev.dump
(注意:E:\Repositories_back \ModifiedBuckup\Dev.dump爲配置庫SMS“時時小備份”的累積備份Dev.dump所在路徑,E:\Repositories_back\2010-06-01\SMS爲配置庫SMS最近一次“定期大備份”的備份庫SMS所在路徑)
然後再按照還原策略1中的方法將備份庫test進行還原。沒有發生內容被有效修改的配置庫,可直接按照還原策略1中的方法進行還原即可。
使用Web 瀏覽器訪問
打開瀏覽器,在瀏覽器地址欄輸入要訪問配置庫對象的“https:\\.........”網絡路徑進行連接,然後在彈出的驗證登陸框中輸入配置庫管理員所給的正確用戶名和密碼,如圖
登陸成功後即可對擁有權限的配置庫對象進行瀏覽和下載了。
TortoiseSVN的基本使用方法
簽入資源到SVN服務器
假如有一個共享文檔的文件夾,把這個文件夾中的資源簽入到SVN Server上的test庫中,首先右鍵點擊共享文檔文件夾,這時候的右鍵菜單如下圖所示:
svn是版本庫的根目錄,test是爲測試組建立的版本庫:點擊導入,彈出下面的窗體,其中https://neng:8443/是服務器名和端口號,
點擊OK按鈕,會彈出下面的窗體,要求輸入憑據:
在上面的窗體中輸入用戶名和密碼,點擊OK按鈕:
如上圖所示,好了,共享文檔中的資料已經成功簽入SVN服務器了。這時候團隊成員就可以遷出SVN服務器上的共享文檔到自己的機器了。
簽出資源到本機
在本機創建文件夾test,右鍵點擊檢出,彈出如下圖的窗體:
在上圖中版本庫URL:下的文本框中輸入svn server中版本庫的地址,其他默認,點擊OK按鈕,就開始簽出test庫中的資料。
注意:上圖中檢出深度,有4個選項,分別是遷出全部、只簽出下一級子目錄和文件、只簽出文件、只簽出空項目,默認的是第一項。這時候也會彈出對話框,要求輸入用戶名和密碼,通過驗證後即可瀏覽代碼庫中的內容。
一旦你對文件或文件夾做了任何修改,那麼文件或文件夾的顯示圖片機會發生變化。下圖中修改了其中的一個文件:
大家看一下不同狀態所對應的圖片:
提交修改過的文件到SVN服務器
上圖中,修改了09-軟卡CAS文件夾下QC用例編寫規範這個文檔,下面演示如何提交到SVN服務器。
注意:提交資源到服務器時,一定確保本機的資源是最新版本,否則可能提交失敗,或者造成版本衝突。
在09-軟卡CAS文件夾上點擊右鍵或在09-軟卡CAS文件下的空白處點擊右鍵,點擊SVN 提交,彈出下面的窗體:
點擊OK按鈕後,彈出如下圖的窗體:
添加新文件到SVN服務器
我們在[09-軟卡CAS]文件下添加一個新的文件UserInfo.cs,在[09-軟卡CAS]文件下的空白處點擊右鍵,點擊SVN 提交,和上面講的提交修改過的文件到SVN服務器一樣,就可以了。
另外也可以在文件UserInfo.cs上點擊右鍵,點擊TortoiseSVN=>>增加,這樣沒有將這個文件提交到SVN服務器,只是將這個文件標記爲庫中的文件,並將其狀態置爲修改狀態。之後,我們要再SVN C提交這個文件一次,纔可以將其真正提交到SVN服務器上的test庫中。
上面講是添加文件,實際上,添加文件夾的步驟也是一樣的,這裏就不說了。
更新本機代碼與SVN服務器上最新的版本一致
這個也很簡單,只要在需要更新的文件夾上點擊右鍵或在該文件下的空白處點擊右鍵,點擊SVN 更新,就可以了。
注意:更新操作可能會因爲版本衝突而失敗,這是可以使用合併或其他方法解決;也可能因爲鎖定而失敗,這是需要先解鎖。
重命名文件或文件夾,並將修改提交到SVN服務器
只要在需要重命名的文件或文件夾上點擊右鍵,點擊TortiseSVN=>改名,在彈出的窗體中輸入新名稱,點擊OK按鈕,就可以了。此方法也不是直接重命名,而是將該文件或文件夾的名稱標記爲重命名後名稱,也需要我們使用SVN 提交到SVN服務器後才真正重命名。
刪除文件或文件夾,並將修改提交到SVN服務器
最簡單就是,你直接刪除文件或文件夾,然後使用SVN 提交更新到SVN服務器。另外一種方法是在你要刪除的文件或文件夾上點擊右鍵=>>TortoiseSVN=>>刪除,此方法也不是直接刪除,而是將該文件或文件夾的狀態置爲刪除,也需要我們使用SVN提交到SVN服務器後才真正刪除。
注意:實際上,從你把源代碼遷簽入SVN服務器開始,每一個版本的數據和文件,就算是你已經刪除了的,也都可以隨時遷出。