Archive for the ‘bzr’ tag
bzr在launchpad上的简单使用举例
在前面的文章[1]中提到 bzr 和 launchpad 联合,简直把项目管理的方方面面都已经覆盖掉了,这里简单介绍一下如何通过这样的系统来进行 bug fixing。
- 首先,当然你需要安装 bzr 这个软件,可以参见这个帖子[2]。
- 然后,对于你需要的进行 bug fix 的项目记下他的项目简称,大嘴牛以 drizzle 为例子,他的简称是 lp:drizzle
- 先把代码下载下来。
bzr branch lp:drizzle fix-bug100
- 进行代码的修改,调试等等。
- 当这一切都结束的时候,就可以 commit 这些修改。
bzr commit -m "fix bug 100" --fixes=lp:100
- 然后把你本地的修改 push 到 launchpad 系统中进行存档,就像这样:
bzr push lp:~dazuiniu/drizzle/fix-bug100
- 随后,通过网页登陆到自己的分支上,在 launchpad 系统上,你会看到有一个 propose for merge 的选项,
点击她!
注意这里的 fixes 选项,这个可以告诉 launchpad 系统你当前的 commit 是用来针对 bug100 进行修复的。这是 一个很重要的信息。
注意这个 branch 的规范是波浪线之后加自己的 id,加项目的名称,最后加分支的名字。
恭喜你,你完成了一个 bug 的 fix 过程,当然,项目的负责人会对你的代码进行审查,决定最终是否会被合并。
通过这种方式,你不用再通过 email 的方式来进行 patch 的发送,所有的代码 review 都是通过网上进行,当然 lauchpad 也会贴心的给你发邮件通知,怎么杨,省去了不少心思吧~
[1]. http://www.dazuiniu.com/blog/2010/05/18/git-vs-mercurial-vs-bazaar.html
[2]. http://www.dazuiniu.com/blog/2010/05/12/install-bzr-tools.html
Git vs Mercurial vs Bazaar
分布式的代码管理软件最近很火。今天大嘴牛就八一八这个东东。
这是啥玩意儿?
哎呀,如果你是一个做开发的,在这个时代还不知道分布式代码管理系统,那么很显然你已经out了,先不嘲了。言归正传,其实大嘴牛觉得叫上个分布式听起来老别扭了,其实就是一个分散的代码管理系统。如果你以前用过subversion,或者更老的cvs,你就会知道,经常每天开发的第一件事情就是去update下载的代码,看看上游代码有没有新的东西,svn和cvs的精髓就是最终的代码仓库都是放在一个专门的服务器上,所有的操作都是依附于这个服务器,而本地checkout出来的只是一个副本而已,当然你可以在这个副本上进行开发,但是一旦涉及到需要提交commit,就必须和中心的服务器进行通信,在该服务器上进行代码的提交。subversion的这种围绕中心的开发模式在大公司中需要统一管理代码仓库的情况下使用的可以很好。但是时代发展到了今天,开发者不再满足于这种以多点围绕中心的模式进行开发,他们希望在自己的本地就有整个代码仓库的全部,而自己就可以在本地进行commit等工作,这就是所谓的分散(或者叫做分布式)的代码管理软件,而开发者在本地,对该代码仓库有所有的控制权,可以随意的commit,产生branch(想想那个用subversion进行branch,甚至merge的痛苦情形么),查看log的速度那是飕飕的,与之相比有时候一个svn log操作就要等上好半天,因为需要和svn的服务器进行通信。
Git
Git是由Linus老大亲自闭关数日搞出来的这么一个东西,当时的情况是bitkeeper不再资助linux内核的管理,迫于无奈,大家总不能在mailinglist上发tar包吧,不过这也不是没有,以前就这么干过。Git的开发语言是C和一些shell脚本,但是慢慢地,shell脚本逐渐被纯C语言所替代。Git所有开发的需求方就是为了让Linux的全世界的hacker们更加方便的进行协作。比如其中十分好用的email发送patch功能就十分突出,而且在开发的一开始就占据了很重要的地位,因为这个是和Linux内核所倡导的通过邮件列表讨论问题来解决问题所一致的。Git现在最被广泛使用的就是Linux内核开发项目。
Mercurial
这是“水银”的意义,命令行的缩写是hg,也是化学元素中汞的缩写。这是管理系统是用python写就的,所以一直就有人诟病说速度不快。但是利用python也有一个很直接的好处,那就是跨平台,当git在windows平台还在痛苦挣扎的时候,mercurial就在轻松地运行于Windows平台,而基本没有任何障碍。Mercurial现在使用比较多是Xen项目。
Bazaar
Bazaar这个字看起来实在是奇怪,事实上,这个字来自于波斯语,表示市场的意思,好诡异的词语。bazaar的历史渊源还是蛮久的,她最早继承于GNU arch和Baz,后面的故事就是一个一般开源项目的发迹历史了,一个开发者在环顾一周之后说,“其他的这些代码管理系统好弱,我要自己写一个”,于是biu一下的,bazaar出世了,当然这中间也经历了很长的时间。Bazaar的命令行缩写是bzr,她也是用python语言写的,同样的,速度肯定没有像git那么快。Bazaar的背后投资者就是Canonical公司,因此Ubuntu也就是bzr使用最多的项目。
网站社区
分布式的代码管理系统一个很好玩的现象就是先后都出现了与之相对的网站,专门用来存放开发者的代码仓库。大嘴牛来一一聊聊。
首先是git,这个首当其冲的是github.com,
这个网站几乎是判随着git的开发就一直持续着,到现在俨然是存放git代码仓库的一面大旗。github的定位是做通过代码交流的网络,关注的是程序员之间的交流,比较大嘴牛可以方便的watch别人的代码,甚至fork出自己的版本来,这些是github所鼓励的。相对于传统的项目管理方便就会显得弱些,issue的追踪是有的,但都不是很方便。在这点上,就完全不如bzr了。
说到bazaar,她的网上互动功能实在是好的没话说,launchpad就是更像传统的项目管理系统,每个项目都有各自的bug管理系统,blueprint管理系统,甚至还能在上面提问题,邮件列表也是默认提供的,基本上任何项目管理方面的问题都可以在上面解决。git的开发者习惯通过邮件列表来发送patch,但是bazaar的哲学却不是这样的,你需要在launchpad上建立一个branch,然后通过本地push到launchpad服务器,最后通过网页的方式来propose for merge,所有的code review都是通过网上来实现,不需要大嘴牛拿着个mutt,在那里看patch了。bzr和这些launchpad的在线服务结合的是这么的紧密,以至于你只用bzr而不配合launchpad功能使用的话,实在感觉有些不方便了呢。
最后说的是mercurial,在线这块她还属于追赶github的阶段,虽然先有bitbucket的域名,后来又说我们要更简单的域名,这不hg.io,但这都不能逃脱在追赶的命运,风格和github类似,不是为了专门的项目管理而设立的。
大嘴牛码字好辛苦,各位读者看得也辛苦,如果大家还没有试过,可以尝试一下噢~
bzr的locale问题
刚装完bzr,却发现了下面的错误,真是讨厌啊。
bzr: warning: unsupported locale setting bzr could not set the application locale. Although this should be no problem for bzr itself, it might cause problems with some plugins. To investigate the issue, look at the output of the locale(1p) tool available on POSIX systems.
网上搜索了一圈,都没有靠谱的解决方案,当然也可能是大嘴牛搜索方法不当吧,还是本着老毛同志所说的”自力更生“的原则,大嘴牛自己看了一下,其实很简单,只要把bzr的setlocale改掉就可以了。diff如下:
--- bzr-old.py 2010-05-17 18:43:49.000000000 +0800
+++ bzr-new.py 2010-05-17 18:43:31.000000000 +0800
@@ -91,7 +91,7 @@
try:
- locale.setlocale(locale.LC_ALL, '')
+ locale.setlocale(locale.LC_ALL)
except locale.Error, e:
sys.stderr.write('bzr: warning: %s\n'
' bzr could not set the application locale.\n'
但问题大嘴牛看了lib下的locale.py文件,
def setlocale(category, value=None):
""" setlocale(integer,string=None) -> string.
Activates/queries locale processing.
"""
if value not in (None, '', 'C'):
raise Error, '_locale emulation only supports "C" locale'
return 'C'
看到直接传入空串应该也是可以的啊,怎么会出错呢,罢了,反正现在OK了。
安装bzr系列软件
为了更好地利用bzr这个源代码管理软件,大嘴牛花了点时间去装,其中还遇到了一些小小的问题。
bzr的版本不一,在默认的Fedora上用的都是比较老的1.x版本,大嘴牛为了使用一些高级的比如pipeline功能,就必须使用新的2.x版本的bzr。既然都上2.x,那就直接来development版本的算了。
以下是一些简单的过程。噢。对了。为了可以利用bzr来下载东西,必须先安装一个tar包的或者利用系统默认的,这就是先有鸡还是先有蛋的著名问题,想来任何的bootstrap都会遇到的问题。
$ bzr branch lp:bzr bzr.dev && cd bzr.dev && sudo python setup.py install # 安装开发版本的bzr工具 $ bzr branch lp:bzrtools && cd bzrtools && sudo python setup.py install #安装bzrtools,有很多有用的工具 $ bzr branch lp:bzr-pipeline && cd bzr-pipeline && sudo python setup.py install # 安装pipeline工具
但是在装了pipeline工具之后,在任何的bzr命令之前都会出现一下的错误:
Unable to import library "launchpadlib": No module named launchpadlib Unable to load plugin 'pipeline' from '/usr/lib/python2.5/site-packages/bzrlib/plugins'
一看是由于launchpadlib没有安装,需要再安装下面的包:
$ bzr branch lp:launchpadlib && cd lauchpadlib && sudo python setup.py install #这里如果没有适合的easyinstall,他会自动去下载并安装
好了,现在你应该有一个差不多能用的bzr环境了。


