Bazaar 是一个使用
Python 写成以 GPL 方式授权的软件代码管理工具。同类的工具有 Subversion,git,CVS,RCS,Perforce,Visual SourceSafe 等。其中 Subversion 是近年来的热门解决方案,
Apache Foundation,
Google Code 和
SourceForge 等开源开发协作网站都提供了对 Subversion 的支持,Subversion 的 2 位作者更是被挖到了 Google。
Subversion 是一个中心化(centralized)的方案,即所有的项目参与者都需要向同一个代码管理库提交代码。在大部分的安装中,这些代码管理库位于一个 Internet node 上,通常需要使用 http 或者 https 协议访问。因此,每次进行代码提交的时候,都需要 Internet connectivity。如果开发者在本地的代码中做了足够大的改变,而又不想马上提交到 Subversion,却又想自己对这些变化进行管理,就会比较麻烦。
Bazaar 使用了一种不同的方式。当一个项目开始的时候,运行:
$ bzr whoami "Joe Doe <joe.doe@gmail.com>"
首先对自己的身份进行标识。这个命令只需要运行一次。然后,在代码目录中运行:
$ cd my-project
$ bzr init .
$ bzr add
$ bzr commit -m "Initial import"
即可将 my-project 纳入了 Bazaar 进行管理,并且进行了一次代码提交。这是和 Subversion 很不同的一点,即代码可以不需要 Internet 就在本地进行提交。然后,到一定阶段的时候,你或许想把代码发布到其他地方,比如你的一台远程主机上自己的帐号目录中:
$ bzr push sftp://jod@jod.example.com/public_html/foobar.joe/
2 revision(s) pushed.
通过 sftp 协议进行的 push 是非常安全的。而且不需要在服务器上安装任何特殊的软件。常规的 Unix 服务器即可满足全部需求。
如果别人想获得你的代码,只要发布到服务器上的那个目录是一个可以通过 http 协议访问到的目录的话:
$ bzr branch http://jod.example.com/foobar.joe/
即可获得代码。如果别人也有那台服务器的 ssh 账户,那么他也可以通过 sftp 协议进行 bzr branch。当你再次将一些更新 push 到服务器上时,别人只要运行:
$ cd foobar.joe
$ bzr merge
即可获得来自你的更新。而 Bazaar 的不同之处再次体现:如果别人已经在你的代码上做了一些更改(some hacking),那么这些更改并不会因为 bzr merge 而消失,运行:
$ bzr diff
就可以看到 merge 之后的本地代码与远程代码的区别。
于是,像 Bazaar 这样的方式,被称之为一种去中心化(decentralized)的方式,和 Subversion 很不同。对于服务器的需求也比 Subversion 低了很多。而且,如果你在一个没有网络的地方想 commit 的话,Bazaar 就提供了这样的可能性。然后到了有网络的地方再通过 sftp 协议进行 push。很适合在火车上写程序的家伙。:P
Bazaar 的网站上有更多详细的文档和有趣的插件:
http://bazaar-vcs.org/
目前已经有一些开源项目在使用 Bazaar 进行管理,比如 Drupal,pkg-config,Samba 等。更详细的名单在这里:
http://bazaar-vcs.org/WhoUsesBzr
[
read more on livid.cn ]