推荐给好友 上一篇 | 下一篇

通过svk,离线使用subversion

我的需求很简单,就是:
1、希望将源代码放到Google Code上;
2、在没有连接网络的时候,依然可以commit

在网上查询一下,发现这其实是对“分布式版本控制”的需求。因为Google Code用的是subversion,而我自己最熟悉的客户端工具也是subversion,所以我最终选择了SVK

SVK与subversion的关系密切,它是采用subverion respository作为存储后端,所以可以直接用利用subclipse, tortoiseSVN来操纵svk respository,这也是我所希望的。SVK最重要的作用就是可以将本地的respository与远程的respository进行同步,这样平时我可以只是在本地respository进行编程,多次本次提交之后,在适当的时候将变更同步到google code上。

具体的做法是:

1、为远程respository建立本地镜像

svk mirror //mirror/myproject http://myproject.googlecode.com/svn/
这个语句的作用是将两个respository关联起来

svk sync //mirror/myproject
这个语句的作用是将指定的镜像目录与远程respository同步,这是在建立镜像关系后第一个要运行的命令。

2、建立本地分支

虽然//mirror/myproject位于本机,但是不建议对//mirror/myproject目录直接操作。主要的原因有两个:
1)对mirror修改的一切,都会自动同步到远程respository。如果网络不通,对镜像目录的改变就会失败,这就失去了离线提交的特性。
2)我用subversion客户端工具对mirror直接操作后,结果在sync的时候得到了“is not a mirrored path”的错误,在网上查询发现这个问题已经被讨论过

Basically any dealing with mirrored paths with a non-svk tool (i.e. svn) is going to cause issues due to some internal properties that svk uses.

因此必须建立自己的分支:
svk copy -p -m "Make local repo" //mirror/myproject //local/myproject

建立本地分之后,则可以随意用subversion对//local/myproject进行操作了。

这个时候其实你一共有三个存放代码的地点:1)远程googel code;2)mirror目录;3)本地分支。你的工作则是在本地分支上面进行。需要知道:
1)svk提供smerge命令,将一个分支的变化合并到另外一个分支
2)对镜像目录的任何改变,都会自动实时同步到远程respository
3)svk sync的命令用于同步镜像目录

3、将本地分支的变化提交到远程respository

通过上面的知识,你就知道只需要执行以下命令,就会知道更新远程的google code。

svk smerget -I //local/myproject //mirror/myproject

一般情况下你是在对本地分支进行多次提交后才去执行这个命令,如果不使用“-I”(--incremental)参数,svk只会将本地分支的当前状况合并到//mirro/中,这样镜像目录会丢失你之前每次提交的信息(例如注释等)。

4、将远程respository的变化更新到本地

由于我目前是一个人玩,就不存在这个动作,但是根据上面的知识,我们知道需要两个命令

svk sync //mirror/myproject
svk smerget -I //mirror/myproject //local/myproject

遗留问题:
我有时候会在proxy环境下工作,不清楚如何对svk进行proxy设置。在SVKFAQ上发现说svk还不支持proxy,不过可以通过subversion,但我就是找不到具体应该怎么弄。在网络上发问,也没有人理睬,更加诡异的是死活无法加入svk maillist。

参考资料:
1. Version Control with SVK
2. Google Code: Getting started with svk
3. Explaining the SVK Workflow

TAG: Subversion subversion 离线 svk
查看全部1条评论

最新评论

  • 删除 引用 tiez (2008-12-22 16:53:06, 评分: 0 )

    老大是强人,鉴定完毕。
 

评分:0

301 Moved Permanently

301 Moved Permanently


nginx/0.5.23

我来说两句