从linux迁移svn数据到windows 将svn数据库从linux迁移到windows的VisualSVN
近期换服务器,要将svn数据迁移。原来是linux系统上的svn服务器,新的服务器为windows2008 server,便使用了免费的VisualSVN,简单方便,重要的是使用视图操作,直观易懂。但是在数据迁移上,在网上搜索了半天都没有现成的例子可借鉴,便自己手动尝试。
在linux上也是目录结构,先把项目的整个目录拷过来,如repository目录下的项目project1的全部文件,只要文件没有漏,而且拷的过程中没有对这个目录做提交操作,那把整个目录拷到VisualSVN的Repositories目录下后,在主界面的左侧菜单栏Repositories右键刷新就可以看到原来项目的数据已经迁移过来了。在项目名称右键选Browse,就可以在浏览器上查看该目录的内容。当然,新的库要先创建用户,用该用户的验证信息登录就可以看到新的项目数据了。
这期间出了个问题,刷新项目后点击提示版本XXXX找不到,无法打开!开始以为是拷文件的时候漏了,后来想到,既然提示是版本找不到,是不是某个地方记录了版本信息,而那个版本对应的文件没有呢?循着这个思路,去项目目录下查找,果然找到了版本的数据文件,在project1\db\revs目录下,按照版本号的第一个数据组织,我提示的是缺少版本9383,就到9的文件夹下查找,果然没有9383的文件!而在project1\db\revprops\9\目录下,也没有该文件。那么,哪里加载最新的版本信息呢?返回到db目录下,有个recent的文件,用记事本打开,里面只有一条数据,就是9383!把这个改成较早的最后的版本号,重新刷新项目,可以打开了!那个开心啊:)回到原来的服务器上查看日志,原来在拷文件的期间,由于项目比较大,费了不少时间,而这期间居然有人提交了代码!导致部分数据不一致,因而迁移到新服务器上时打不开!因此在迁移数据期间不能对该项目有任何操作。
导完数据,到用户和权限数据了。在linux下,储存用户的文件名为svn_auth_file,而在VisualSVN的根目录Repositories下,保存用户信息的文件为htpasswd,数据的组织方式是一致的,都是每个用户一行,用名值对的方式保存,如zz=xxxxxxx,这就好办,直接拷过来就行了。然后在visualSVN的菜单users下刷新就可以看到导入的用户了。不过这样有个问题,可能是不同系统下密码的加密方式不一样还是其他原因,有的原来的密码不行了-_-!只要重设,好在visualSVN好操作,右键用户名set password就行了。
权限数据更重要,哪个目录对哪个用户开放了什么权限,要是重设是个繁琐耗时的工作,即使在视图操作的方式下。而在linux下,用一个文件svn_access_file就储存了所有的信息,visualSVN下没找到类似的文件。于是先在visualSVN下给某个用户开放某个目录的权限,看看哪个文件改变了。通过这个操作,发现conf目录下有个VisualSVN-SvnAuthz.ini的文件,记录了该项目下各目录的权限分配信息,只是方式有所不同,原来linux下是指明哪个项目的,所有目录前有project1:这样的信息,现在只针对本目录,就去掉了项目名,把linux下关于该目录的所有信息拷到这个ini文件中,去掉项目名,保存,然后测试,发现是可以的!虽然该文件提示不要手动变更,但是改了一样可以:)