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服务器开始,每一个版本的数据和文件,就算是你已经删除了的,也都可以随时迁出。