svn之svnsync
这几天需要将google code的svn在本机做一个同步,主要是为了在内部环境里做集成测试。试了一下svnsync,确实很好用。注意:这个功能是在svn 1.4开始提供的,老的版本请升级。 :)
总体来讲需要两步:
1.初始化一个svnsync的代码库
2.初始化一个同步
3.同步
所有的命令都是svnsync。
初始化本地一个空的svn库:
svnadmin create /home/hd/svn
初始化svnsync同步库:
svnsync init file:///home/hd/svn https://xbaydns.googlecode.com/svn --username huangdong
同步:
svnsync sync file:///home/hd/svn
这里有几点注意:
1.svnsync需要一个hook,如果没有启动这个hook,做init时会提示:
svnsync: Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook
你只需要去建议这个hook就好。不要忘记这个hook要有可执行的权限
2.如果是cp了pre-revprop-change.tmpl,哪么需要做一点改动:
将最后的
if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi
echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1
删除或注掉,不然也无法执行过去。
3.本机的路径是file:///,也就是三个/,别少写一个哟 :)
最后一点小提示:
svnsync init做了什么?
会将/db/revprops中的0版本文件中加入同涉源库的信息。比如这样的信息会写入:
K 8
svn:date
V 27
2007-10-19T23:50:27.101423Z
K 17
svn:sync-from-url
V 34
https://xbaydns.googlecode.com/svn
K 18
svn:sync-from-uuid
V 36
0f95f432-e13c-0410-b291-c5e6509ff455
K 24
svn:sync-last-merged-rev
V 2
43
END
以上环境为FreeBSD 7.0,subversion 1.4.4。
引用通告 (0)
下面所列出的是引用这篇文章: svn之svnsync 的Blog链接.
这篇文章的引用通告URL: http://mt.opensource.org.cn/cgi-bin/mt/mt-tb.cgi/188

...可惜不支持版本库中子目录的同步。。嘿嘿,有人能patch一下不。。
从它的其作原理上来讲就明白不能patch了。svn的所有reversion都在根上的,子目录是没有办法记录自己的reversion。换句话来讲,同步到的目的机上reversion都不是连续的了。换句话来讲,这也是比较好防护不允许的人,把整个svn库拿跑的方法 :)