星期一, 四月 02, 2007

sourceforge svn

现在需要使用 sourceforge 的 subversion,并将以前的版本库导入到里面。这涉及几个方面的问题,可以参考 sourceforge 的文档。
http://sourceforge.net/docs/E09

首先是需要启用 subversion。我的项目创建时默认使用的是 CVS,可以进入 "Admin"->"CVS" 禁止掉,在进入 "Admin"->"subversion" enable。

sourceforge svn 的 repos URL 是:
http://PROJECTNAME.svn.sourceforge.net/svnroot/PROJECTNAME
所以我的项目将是:
http://crablfs.svn.sourceforge.net/svnroot/crablfs
但是如果要写入,则需要使用 https。

先试试检出:
sh$ svn co https://crablfs.svn.sourceforge.net/svnroot/crablfs
svn: Unrecognized URL scheme https
要检查 svn 支持哪些 scheme,使用 svn --version 命令:
sh$ svn --version
...
he following repository access (RA) modules are available:

* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.
- handles 'http' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
- handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
- handles 'file' scheme
从 google search 的情况来看,必须添加 ssl 支持,而这个支持是由 neon 库来完成的。另外还需要 apr/apr-util。我之前使用的是 1.1.4 版,neon 和 apr 都包含在 source 里了,但编译添加 --with-ssl,或单独编译 neon-0.26.3 再在 svn ./configure 时添加参数 --with-neon 都无效。

换用 subversion-1.4.3,neon 和 apr 都不再包括在源代码中了,只能自己编译。但似乎这次必须使用 apache(必须指定 apxs),即使使用 --disable-mod-activative,否则连 http scheme 都没有了。

不想为了一个 svn client 装一个 apache server,结果找了一个 1.3.2 解决这个问题,也是包含 neon 和 apr 的,
The following repository access (RA) modules are available:

* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.
- handles 'http' scheme
- handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
- handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
- handles 'file' scheme
添加 --with-ssl 编译。

然后需要将以前的版本库导入。不可能直接使用 svn import 导入,因为需要保留以前的所有信息。可以参考:
http://sourceforge.net/docs/E09#import
的指导。大体上,就是先使用 svnadmin dump 得到当前版本库的备份,再利用 sourceforge 的机制导入。
sh$ svnadmin dump /mnt/file/data/gears | gzip >/tmp/gears.gz
sh$ cp /tmp/gears.gz chowroc@crablfs.sourceforge.net:/home/groups/c/cr/crablfs/
这里 /home/groups/p/pr/project 就是相关文档的 DocumentRoot。

然后进入 "Admin"->"Subversion"->"Migration Instructions"->"migrate"进入:
http://sourceforge.net/project/admin/svn_migration.php?group_id=180695
填写刚才的 .gz 文件并提交即可。

最后还有一个问题,就是备份。虽然 svn 版本库保存在网络上了,但是还是需要以防万一,且不说如果 sourceforge 本身出问题如何,如果出现象地震或 GFW 等问题导致不能连接,至少还可以使用本地拷贝,如果可能还可以使用前面的 migrate 方法重新导入。用如下方法备份:
sh$ mkdir gears
sh$ cd gears
sh$ rsync -av crablfs.svn.sourceforge.net::svn/crablfs/* .
注意需要使用 svn/crablfs/* 而不是 svn/crablfs,因为 svn/crablfs 实际上是到 /home/groups/c/cr/crablfs/svnroot 的一个符号链接。

其他一些问题:
如何查询某个特定版本与另一个特定版本相比修改了哪些文件?
目前不知道如何直接利用 svn 的命令来做到,但是可以使用 --diff-cmd -x 来调用 diff,从而可以得到一个简要清单:
sh$ svn diff --diff-cmd -x --breif
因此也可以利用这一点做一些其他形式的比较,比如我比较喜欢使用 diff 的 -y --suppress-common-lines:
sh$ svn diff --diff-cmd diff -x '-y --suppress-common-lines' utilsea/trunk/fs_backup  | less

没有评论: