[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: 我想把我维护的 qterm, chmsee, lunar-applet 放到 alioth 的 chinese 项目



Ming Hua <minghua@rice.edu> writes:

> On Sat, Dec 15, 2007 at 09:45:28AM +0800, Ji YongGang wrote:
>> "LI Daobing" <lidaobing@gmail.com> writes:
>> >
>> > 不过这两个软件上游几乎没在更新了,chmsee上游连版本仓库似乎都丢了。
>> 
>> 没丢,还在 :D
>> 
>> http://chmsee.gro.clinux.org/archives/
>
> 这是什么格式的 repository?Arch?
>

对,是 Arch。

以前写过一篇简介,后来服务器的 wiki 数据库坏掉了。这是我手头的备份
(wiki 格式的)。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

刚开始的时候,[http://chmsee.gro.clinux.org ChmSee] 与 [http://gro.clinux.org GRO] 上的其他项目一样,也是
使用 GRO 提供的 CVS 作为项目的版本控制系统。但使用了一段时间以后,遇到了一
个难以容忍的问题,让我决定放弃 CVS,改用 Arch。

这个问题就是执行任何 CVS 命令都要耗费大量的时间。我们知道,CVS 在客户端
的工作目录下不保存任何以前的版本的副本,因此任何查询都需要跟服务器打交
道。而其中的 diff 命令是比较耗费系统资源的。也不知是 GRO 的服务器性能比
较低,还是特意做了限制,在查询当前工作目录下 chmsee/src 里面做了哪些变
更时,使用 cvs -n update 命令竟然要等数十分钟。提交的时候,如果不指定
具体的文件,直接使用 cvs ci 也要花很长的时间。

查询当前代码状态,是开发过程中经常要用的功能,但是因为 GRO 上的 cvs 性能
问题,严重影响了开发效率。另外,GRO 也无法匿名访问 CVS 仓库,只提供
CVSROOT 的打包下载,这对于非项目成员跟踪项目代码非常不便。

除了 CVS,GRO 还为软件项目提供了主页空间,并让用户通过 sftp 进行维护。这些资源
对于使用 Arch 来进行版本控制来说,已经可以满足建立服务器的要求。
下面就 ChmSee 项目在 GRO 上使用 Arch 的过程进行说明。

= 准备 =

首先,在开发人员的机器上建立 Arch id:

<pre>
$ tla my-id "Ji YongGang <jungle@soforge.com>"
</pre>

然后,为 Arch 进行 GnuPG 签名与签名验证设置:

<pre>
$ mkdir -p -m 700 ~/.arch-params/signing/
$ echo 'gpg --clearsign --use-agent' > ~/.arch-params/signing/=default
$ echo 'tla-gpg-check gpg_command="gpg --verify-files -"' > ~/.arch-params/signing/=default.check
</pre>

= 建立 archive =

GRO 上面 ChmSee 项目主页的路径是 /groups/chmsee,我的注册名是 jungle,
可以用 make-archive 命令在建立 gro.clinux.org 上面建立 archive。

<pre>
$ tla make-archive -l -s jungle@gro.clinux.org--2006 sftp://jungle@gro.clinux.org/groups/chmsee/archives
</pre>

命令中的 -l 参数是要求创建 .listing 文件,供以后匿名用户访问使用。-s 参
数是说明该 archive 要进行 GPG 签名。archive 名称按照 Arch 文件习惯写成
jungle@gro.clinux.org--2006,其中的 email 地址并不需要是实际的 email 地
址。

接下来为 ChmSee 项目设置 category、branch 和 version,category 就设为
chmsee,branch 为 main,version 为 0,组合在一起就是 chmsee--main--0,
然后用 archive-setup 命令创建:

<pre>
$ tla archive-setup jungle@gro.clinux.org--2006/chmsee--main--0
</pre>

= 导入 ChmSee 源码 =

首先将 ChmSee 0.9.6 发布版的源码解压到一个目录 chmsee,然后初始化项目
树:

<pre>
$ cd chmsee
$ tla init-tree jungle@gro.clinux.org--2006/chmsee--main--0
</pre>

init-tree 命令会将一些项目相关信息放到新建的 {arch} 子目录里面。

接着,添加文件到版本控制系统中:

<pre>
$ tla inventory -s -B --names | xargs -n 1 tla add-id
</pre>

具体的添加命令是 add-id,而 inventory 命令是辅助寻找源码文件的工具。

确定所需的文件已经加入,最后使用导入命令:

<pre>
$ tla import -S -s "import ChmSee 0.9.6"
</pre>

命令中 -s 后面是导入时附加的信息,-S 是确保 archive-setup 命令已经执行。

= 建立本地 archive =

与 CVS 的方式不同,导入源码之后毋需再导出一个工作目录,开发人员可以直
接在上面的 chmsee 进行修改和提交流程。

虽然现在就可以开始工作,但每次提交仍然需要跟 GRO 的服务器通讯,遇到网络
不通畅的时候,仍然会影响开发效率。不要忘了 GNU Arch 是分布式版本管理系
统,那么分布式于中央式有什么区别,它的优点又在哪里呢?

下面先在本地建立一个 archive:

<pre>
$ tla make-archive jungle@local--projects /home/jungle/archives
</pre>

与在 GRO 上建立 archive 的 make-archive 命令不同,这次没有 -s -l 参数,
这是由于该 archive 只供单人使用,没有必要签名和发布。

紧接着,将该 arvhive 设为默认:

<pre>
$ tla my-default-archive jungle@local--projects
</pre>

同样,也需要使用 archive-setup 命令,因为是要在 0.9.6 基础上进行 0.9.7
版本的开发,所以取名为 chmsee--local--0.9.7:

<pre>
$ tla archive-setup jungle@local--projects/chmsee--local--0.9.7
</pre>

= 准备工作目录 =

前面的 chmsee 目录是与 GRO 服务器关联的,现在需要一个与本地 archive 关联的开发目录用于日常开发工作。

首先将本地 archive 与 GRO 上的挂钩,也可以看成是把 GRO 服务器上的源码导入本地:

<pre>
$ tla tag jungle@gro.clinux.org--2006/chmsee--main--0 chmsee--local--0.9.7
</pre>

上面命令中 tag 的第二个参数中没有指定 archive,tla 就会自动使用默认的 archive。

然后进入开发目录,导出代码:

<pre>
$ cd ~/projects
$ tla get chmsee--local--0.9.7 chmsee-dev
</pre>

如果省掉最后的 chmsee-dev,tla 创建的目录名就会是 chmsee--local--0.9.7。


= Arch 开发工作流程 =

在 CVS 下开发,一个好习惯是修改代码之前首先进行 cvs update,将源码仓库
里面的最新变更合并到本地。Arch 的工作流程也一样,不同之处是有两个仓库,
需要使用 star-merge 命令完成这项工作:

<pre>
$ cd chmsee-dev
$ tla star-merge jungle@gro.clinux.org--2006/chmsee--main--0
</pre>

如果是工作在 chmsee 目录,而没有本地 archive,则直接使用 update 命令就
行:

<pre>
$ cd chmsee
$ tla update
</pre>

代码修改完毕,另一个良好的开发习惯是写 log,对此,Arch 提供了几个工具可
以帮助我们轻松的完成这项任务。

首先查看这次有哪些代码做了变更:

<pre>
$ tla changes
</pre>

如果想看到具体的修改内容,可以在上面命令后面加上 --diffs 参数。

然后生成 log 信息文件:

<pre>
$ tla make-log
</pre>

该命令会有一个 ++log.chmsee 开头的文件生成,用任何一款文本编辑打开,在
Summary: 行后面写入简短的修改说明,在 Keywords: 空行后面书写详细的说明。

也可以在生成 log 的同时打开编辑器,如:

<pre>
$ vi `tla make-log`
</pre>

最后,使用 commit 命令提交到本地 archive:

<pre>
$ tla commit
</pre>

当本地开发告一段落,可以将它提交到远程服务器上,与其他开发人员共享:

<pre>
$ cd chmsee
$ tla update
$ tla star-merge jungle@local--projects/chmsee--local--0.9.7
$ tla commit
</pre>

= 匿名用户访问源码仓库 =

前面在 GRO 上建立 archive 时候使用了 -l 参数,这就让匿名用户可以用
http 协议访问该 archive。

首先,需要注册该 archive:

<pre>
$ tla register-archive http://chmsee.gro.clinux.org/archives
</pre>

查看注册结果:

<pre>
$ tla archives
</pre>

注册成功的情况下,会看到 jungle@gro.clinux.org--2006 出现在列表中。

因为该 archive 使用了 GPG 签名,所以也需要对 Arch 检验进行相关设置:

<pre>
$ mkdir -p -m 700 ~/.arch-params/signing/
$ echo 'tla-gpg-check gpg_command="gpg --verify-files -"' > ~/.arch-params/signing/=default.check
</pre>

接着需要导入 ChmSee 开发人员公钥,比如:

<pre>
$ gpg --keyserver pgp.mit.edu --recv-keys BF73988B
</pre>

创建一个合适的目录,就可以开始下载源码了:

<pre>
$ mkdir ~/projects && cd ~/projects
$ tla get jungle@gro.clinux.org--2006/chmsee--main--0 chmsee
</pre>

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


-- jungle

Reply to: