Windows 下Subversion 服务器间自动双向同步
去掉以下几行前面的 # 标记:
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
在该部分末段加上两句:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
ServerName前面的“#”标记也去掉,后面加上访问本机的IP地址后面加上端口号。
副服务器:192.168.254.22
修改完服务器名后就在文档最后的部分加上相关下列语句:
主服务器:
DAV svn
SVNPath D:/svn/testpro
SVNListParentPath on
SVNIndexXSLT "/svnindex.xsl"
副服务器:
DAV svn
SVNPath D:/svn/testpro
SVNMasterURI http://192.168.254.23:8443/svn/testpro
SVNListParentPath on
SVNIndexXSLT "/svnindex.xsl"
DAV svn
SVNPath D:/svn/testpro
SVNListParentPath on
SVNIndexXSLT "/svnindex.xsl"
Order deny,allow
Deny from all
allow from 192.168.254.23
Location里面并没有设置访问密码,就是说登陆的时候并不需要任何验证信息,要避免这仲情况,可以在里面添加:
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile passwd
Require valid-user
如果添加了需要验证信息的话,就必须创建passwd文件
打开命令提示符,进入Apache目录,即:X:/Program Files/Apache Software Foundation/Apache2.2。这一步必须完成,因为passwd文件必须在该文件夹下创建。然后使用以下命令:
bin/htpasswd -c passwd
输入以后,会提示输入密码,当确认密码后,系统就会提示文件创建成功。之后就可以使用以下命令来继续添加用户:
bin/htpasswd passwd
输入以后,提示信息跟之前一样,按照提示完成密码确认,这样就完成了用户的创建了。
接下来到副服务器的版本库文件夹下,同样是寻找hooks的文件夹。把post-commit.tmpl和pre-revprop-change.tmpl都改成bat文件,打开post-commit.bat,把内容全部删除掉,添加以下内容:
::[1] REPOS-PATH (the path to this repository)
::[2] REV (the number of the revision just committed)
SET REPOS=%1
SET REV=%2
svnsync sync http://192.168.254.22:8443/svn/project-proxy-sync
接下来修改pre-revprop-change.bat。把原有的内容也删除掉,添加以下代码:
::[1] REPOS-PATH(the path to this repository)
::[2] REVISION(the revision being tweaked)
::[3] USER(the username of the person tweaking the property)
::[4] PROPNAME(the property being set on the revision)
::[5] ACTION(the property is being 'A'dded, 'M'odified, or 'D'eleted)
SET REPOS=%1
SET REV=%2
SET USER=%3
SET PROPNAME=%4
SET ACTION=%5
svnsync copy-revprops http://192.168.254.22:8443/svn/project-proxy-sync %REV%
这样,主服务器的设置基本完成。
回到副服务器上面,打开命令提示符。然后输入以下命令:
svnsync init file:///x:/svn/testpro http://192.168.254.23:8443/svn/testpro
按回车后会提示输入用户名和密码,输入正确后会提示同步完成。这样所有的同步初始化就完成了。
开始同步
使用TortoiseSVN导入到主服务器的版本库内。此时导入主服务器事,副服务器也收到了主服务器的同步指令,开始同步。当TortoiseSVN提示导入完成之后,无论主副服务器的版本都是一致的。
做完这一步之后,整个配置就完成了。随后无论向哪台服务器提交,两台服务器的版本都会自动同步。不过前提是这两台都是在网络上的。
参考文章:
Svnsync:Subversion备份版本库的好工具 http://wiki.iusesvn.com/index.php/Svnsync%EF%BC%9ASubversion%E5%A4%87%E4%BB%BD%E7%89%88%E6%9C%AC%E5%BA%93%E7%9A%84%E5%A5%BD%E5%B7%A5%E5%85%B7
Subversion 1.5的WebDAV通过代理写 http://www.subversion.org.cn/?action-viewnews-itemid-31
写在最后:
因为我在的公司是跨国公司(哈哈,主要是接国外业务,很小的公司总共不到20人,不是什么大公司)所以有很多开发的同事都在国外,国外的机器连国内的服务器实在是太慢了,所以公司就希望可以有两台Subversion的服务器,整个网络用Hamachi构建,这样一个虚拟局域网搭建Subversion的平台。因为主要开发都是在Windows下的,网络上很多相关资料,包括Subversion的配置,钩子文件的编写都是用Linux环境下的,所以有写这文章的冲动。
在发表之前我也先搜索了论文里面看看有没有相关的文章,可以说非常少吧,所以就决心把这文章写出来。
里面的东西全部都是自己一步一步摸索出来的,而我开始的时候在想,到底这文章是属于原创还是整理呢?最后我还是选择了后者,主要是因为其实已经的确可以实现两台服务器双向同步,只不过是在Linux下面的,我仅仅是把手头上的资料加以整理,转换为在Windows下的,自己创作的东西实在是少,用原创这词实在有点对不起原作者。故选用整理一词,并把最主要的两篇参考文章列出来。
配置过程中也遇到过很多问题,在搜索答案的时候遇到一个很有趣的事情。在某个论坛上也有专门的SVN版块,那里的版主也是通用SVN的人,可惜的是那论坛太幽默了,连复制文字都禁用了。其实我在想,能上这些技术论坛的,电脑基础也有一定水平的,真的要复制论坛的文字内容还不是小事,这也实在是多此一举吧。而且Subversion和TortoiseSVN本来就是免费软件,我估计作者也希望广大用户在使用中若有什么想法或者经验能够很直接地跟其他人交流,而那论坛的行为我感觉真的有违免费软件作者的初衷。(这段纯粹牢骚,若有不满,大可略去)。