分布式版本控制(二)

本篇介绍Bazaar

我知道Bazaar是从livid那里看到的,他这篇介绍基本上就是翻译Bazaar官方的一个快速入门文档,强烈推荐参考一下。

Bazaar的优点在于功能强大并且安装使用很方便。因为是用Python写的,只要在安装了Python之后,再安装一下Bazaar就可以使用了。需要注意的是,它的SFTP功能使用了两个包: pycrypto和paramiko。这是需要额外安装一下的。刚好我安装Bazaar的时候两个包的官方网站都不太正常(难道是RPWT?),最后只好通过GOOGLE找到别的镜像才下载到。

Bazaar 的缺点是速度太慢。它的慢倒不是像云风所说的那样,对大项目太慢,而是因为它是纯python的程序,在windows下每次运行都要启动python环 境,所以每次输入命令都要等上一会儿才执行,对于像我这种经常用status命令检查的人或是那些用小步迭代的XP方式开发的人来说,比较难以忍受。

据 说也有一个类似TortoiseSVN的ToroiseBZR,但是鉴于我对TSVN的使用经验来说,Windows的Explorer已经很不稳定了, 再加这个东东就不稳定得受不了了。所以我还是不用Tortoise了,再说用惯了命令行操作在很多时候比用Tortoise还方便。

基本的使用方法参见前面链接的那篇livid翻译的快速入门吧。我这里只说一下远程Repository操作方面的问题。

把本地Repository的更新提交到远程Repository可以通过SFTP,这也就意味着服务端是免安装免配置的,这一点我觉得实在是太方便了。

bzr push sftp://[email protected]/public_html/foobar.joe/

如果要从远程Repository取得一个本地副本,理论上也可以通过SFTP:

bzr branch sftp://[email protected]/public_html/foobar.joe/

不 过试用下来我碰到一个问题,通过SFTP作push是没有问题,但是如上面的命令作checkout或branch操作时,却只会下载一个本地 Repository的副本(.bzr目录),不会生成工作目录和文件。即使再用update也不行,不知道是不是我RPWT,还是下来的这个.bzr本 身就有问题。但换成HTTP就可以了:

bzr branch http://jod.example.com/foobar.joe/

但 这样就麻烦一些,一个是安全性的问题,当然可以用HTTP-Auth加上身份验证,但毕竟没有SFTP安全;另一个是需要在服务端作Web Server配置,允许通过HTTP访问远程Repository;第三个问题是HTTP是只读的,这样上传和下载需要使用不同的URL。

Web Server端的配置倒不复杂,标准的WEB静态页面访问配置即可。例如(包含HTTP-Auth身份验证):

  Alias /bzr /home/bzr
<Directory /home/bzr>
Options FollowSymLinks
AllowOverride FileInfo Indexes Limit
Order allow,deny
Allow from all

AuthType Basic
AuthName "Bazaar Repository Files"
AuthUserFile /home/svn/svn-auth-dev
Require valid-user
</Directory>

另外,可以使用.bzrignore文件从工作目录中忽略不需要加入管理的文件,参见这个介绍,这一点比以前用TortoiseSVN时要方便很多。用如下命令可以列出项目工作目录中被忽略掉的文件:

bzr ignored

还有,据云风说,Bazaar有一个巨大的优点就是智能重命名,避免了大量文件的remove/add操作,这的确是一个很大的优点,特别是对于大项目来说。

关于Bazaar的更多信息,参见这里

(未完待续)