bzr 操作参考

参与到Ubuntu的翻译中来
回复
头像
TeliuTe
论坛版主
帖子: 7668
注册时间: 2007-11-25 13:29
系统: 16/18/20/w7
来自: 新疆博乐
联系:

bzr 操作参考

#1

帖子 TeliuTe » 2011-12-14 16:24

zh/Bzr速成
来自:http://wiki.bazaar.canonical.com/zh/Bzr速成

获取 bzr
请参看所用发行版安装方法 ,应该已经存在您所用发行版对应的软件包。

把自己介绍给 bzr
您也许希望自己的名字和 email 出现在修订日志里。

创建 ~/.bazaar/bazaar.conf ,并加上自己的 email :
[DEFAULT]
email = Joe Doe <joe.doe@gmail.com>

现在输入如下命令:
$ bzr whoami
Joe Doe <joe.doe@gmail.com>

创建您自己的分支
您可以在自己的分支上开展工作。在创建好分支后,您就不再需要通过 web 访问来提交自己的修改:

$ bzr branch http://examle.com/code/foobar.dev foobar.joe
Branched 1 revision(s).

Hacking

$ cd foobar.joe
$ hack...

来看看自己的成果:
$ bzr diff
=== modified file 'foo.c'
--- foo.c


该是时候提交自己的辛苦劳动:
$ bzr commit -m 'added some whitespace'
Committed revision 2.

查看修订日志
$ bzr log
------------------------------------------------------------
revno: 2

从主分支更新自己的分支

当您还在勤勤恳恳的耕耘着自己的分支,其他人或许已经向主分支提交了新的代码。有时,您也许想把主分支上的修改合并到自己的分支里:

$ bzr merge
Using saved location: http://examle.com/code/foobar.dev

主分支里作了哪些修改?
$ bzr diff
=== modified file 'pyfribidi.c'


提交取自主分支的修改(注:当然是提交到自己的分支里):
$ bzr commit -m 'merge from main branch'

发布您的分支
您可以直接使用 rsync 把自己的分支拷贝到 web 服务器上,不过最简单的方法是使用 bzr push 命令。

假定您打算把自己的分支发布到 jod.example.com/foobar.joe 里:
$ bzr push sftp://jod@jod.example.com/public_html/foobar.joe/


现在所有人都可以使用如下命令取得您的分支了(您自己不妨也试试):
bzr get http://jod.example.com/foobar.joe/

学无止境
欲详细了解 bzr 命令,则::
$ bzr help commands

比如,欲详细了解 foo 命令,可使用如下命令::
$ bzr help foo
头像
TeliuTe
论坛版主
帖子: 7668
注册时间: 2007-11-25 13:29
系统: 16/18/20/w7
来自: 新疆博乐
联系:

Re: bzr 操作参考

#2

帖子 TeliuTe » 2011-12-14 16:27

Bazaar and launchpad
来自:ray-x.me

Bazaar
类似于git,也是用于团队合作的,跟踪每一个修改,你的或者他人的,使用快照(类似于git)的方案,其可以很容易的合并多人之间的工作。
版本控制工具:文件控制,中央型工具,分布式工具。分布式是最先进的,比如git;而bzr可以中央也可以分布。

bazaar中四个重要的概念
revision--版本/快照
revision包含有版本控制相关的文件目录(包括内容和格式),除此之外还包含有以下四个特性:
提交人
提交时间
提交的名称
父revision

revision是不变的,唯一的,由一个唯一的revision-id标示。
可以认为revision是bazaar的基础单元。
相对于revision-id,revision number是在一个branch中,用来标示revision的,比如9,10,这种标示的方式,相对于revision-id更适合人的理解。

working tree--当前版本控制的目录
一个working tree对应于一个branch。
比如说:使用commit时,就会根据working tree中的所有文件目录等内容建立一个新的revision。
branch--有序的一列revision
最新的revision叫作tip。

branch 可以多个,多个合并起来形成一幅关于revision的graph,graph中的revision是非循环的,而且都被标记了父级和子级,也就称为直接非循环图形,简称DAG。

DAG中的发展主线称为mainline,trunk,left hand side(LHS)。
如果一个branch有其他的发展线路,那么这些线路开始于某一点,并且最终截止于某一点。

repository--仓库
就是仓库,revision的仓库,简单的情况是一个branch对应一个repository,但也有多个branch对应一个repository的情况。

Bazaar的使用
安装bazaar。(略去)
告诉bazaar提交更改的人是谁:bzr whoami "xxx <xxx@xxx.xxx>",可以不加xxx,那么就是显示之前的值。
除了上面一条,其他的bazaar配置,可以暂时不管。

本地使用bazaar
首先是一个目录,可是空的,也可以不是,这个不重要。
进入该目录。

bzr init,在目录中创建一个branch,并在该目录中加入一个隐藏目录 .bzr 。
这时候,bzr只是准备好,但是还需要你告诉它,要追踪哪些文件。

bzr add,不加参数,标示追踪所有文件。

bzr commit -m "init message",将追踪的所有文件建立一个snapshot,也就是一个version,这个version上有一个message,就是”init message“。

当你修改了文件的时候,可以使用bzr status和bzr diff看看修改了什么。
然后,如果就可以commit了。

bzr log,可以看到vervison的历史。

配合lanuchpad
从lanuchpad上获取代码的方法:bzr branch lp:xxxx,这里面的lp就是lanuchpad的缩写。这样就比较好理解了。

也可以使用bzr branch lp:xxx yourdir,我觉得其实没有啥区别。
当lanuchpad上的代码更新了的时候,使用bzr merge就可以将修改down下来,但并没有形成version。

可以看下down下来的代码的更改:bzr diff。
没问题,就可以bzr commit -m ”xxx“。

bazaar使用思考
使用bazaar的方式有很多,单人,双人,多人集中,多人分布,等等。
可以这么认为,单人是所有其他类的基础,双人也可以是其他类的基础。

单人solo
单人的时候,不需要仓库的,只需要init下,做第一次的add和commit;然后在每次的修改后,再使用add和commit,这样就不断的有revision,也就形成了自己的branch。

commit也可以不配合add使用,单独对于某一个文件或者目录,这样也是一个revision。

bzr init 在你当前目录建立一个.bzr的文件夹,只在当前目录,子目录里面没有。

bzr add 在当前目录寻找所有的目录和文件和链接,然后将他们注册在案。

bzr commit 做一个snapshot记录信息,同时需要一个评论message,使用一次这个命令,就将产生一个新的revision,别且提交给branch(其实,产生来revision,branch就自己变更了)。

bzr init-repo dirname 建立一个仓库,而仓库看来都是shared,可以分享的。

bzr status和bzr diff,前者比较粗,后者比较细。

两人合作
bzr branch URL 这个就是从一个URL将那里的branch搞过来,放在本地作为branch。这个命令看起来不需要先建立一个目录,然后在目录中init,直接使用目录就可以了。

有了branch以后,就可以在本地的branch上做修改,commit的也是本地的branch,最终,本地的branch和远端的那个branch需要合并,使用的就是merge这个命令。

bzr merge URL 没有URL的时候,就直接将远端的branch中的修改更新到本地的branch中。在这条命令执行之后,需要commit一下。
多人集中

有两种方式来产生一个主要的branch。
先做一个本地branch,然后push成为中心branch

建立一个仓库 :bzr init-repo project
在仓库中init一个: bzr init project/trunk
将真实的内容,cp到truck中。

add下,commit下,然后,bzr push 成为一个主要branch。
做一个空的中心branch,然后commit内容进去
建立一个仓库 :bzr init-repo project
...... 其实我不懂怎么产生一个主要的branch

思考
有了一个中心的branch之后,本地要一个branch,可以使用bzr branch和bzr checkout,branch就是如同上面的两人合作一样,merge下;checkout则是产生一个绑定到中心branch的branch,当commit的时候,修改除了提交到本地branch,也会提交到中心branch;如果是branch下来的,那么使用bzr bind可以绑定成为checkout。

checkout就是绑定到working tree的branch,这也就是你工作的branch。

bzr update 保持checkout处于最新的状态。

在使用checkout的时候,commit提交的本地和中心branch,commit --local则只提交到本地branch。

多人分布
每个人都有一个mirror branch,这个保持固定,并不是用来工作的branch。

建立一个mirror branch的方法很简单,init-repo 和 bzr branch/checkout

而实际工作的branch称为task branch,建立一个task branch的方法也很简单:

bzr branch mirror fix;mirror是mirror branch,fix是task branch。

使用pull 保持mirror branch最新。

将新的mirror更新到task cd fix,merge,commit

将task的更新放入mirror
如果mirror是checkout,那么cd trunk,update,merge,commit
如果mirror是branch,那么cd trunk, pull,merge,commit,push
头像
TeliuTe
论坛版主
帖子: 7668
注册时间: 2007-11-25 13:29
系统: 16/18/20/w7
来自: 新疆博乐
联系:

Re: bzr 操作参考

#3

帖子 TeliuTe » 2011-12-14 16:30

使用 bzr
作者:白云小岛

要在一个文件夹my-stuff下修改程序,进入该文件夹以后使用init add 和commit三个命令就可以让BAZAAR记录下现在的程序是什么样子:
cd my-stuff
bzr init
bzr add
bzr commit -m "Initial import"
最后一个命令 bzr commit实际上就是提交修改, -m "xxx" 是告诉BAZAAR要在记录(log)里面包含的message是xxx。

如果是一个完全从零开始的程序,也可以
bzr init-repo my.repo
cd my.repo
bzr init my.main

这样在my.repo中建立一个my.main的分支(branch),然后
cd my.main
hack,hack,hack(Do whatever you want to do)

然后用命令
bzr add
bzr commit -m "Initial import"
告诉BAZAAR修改完毕。

当然如果某次修改只需要加一个文件fileX和一个文件夹FolderY,则
bzr add fileX FolderY/
bzr commit -m "add fileX and FolderY"

可以用
bzr log
查看BAZAAR的记录(每次修改了什么东西,就是每次bzr commit后提交的message)
bzr log -r 10.. #查看Revision 10以后的所有修改的地方
bzr log -r ..10  #查看Revision 10以前的所有修改内容
bzr log -r 10..20 #查看Revision 10到Revision 20的所有修改内容

也可以用 bzr diff查看不同版本之间的区别
bzr diff -c 10 #查看从r10到r11的区别

也可以用--diff-options让bzr运行外部的diff程序:
bzr diff --diff-options --side-by-side FileX
头像
TeliuTe
论坛版主
帖子: 7668
注册时间: 2007-11-25 13:29
系统: 16/18/20/w7
来自: 新疆博乐
联系:

Re: bzr 操作参考

#4

帖子 TeliuTe » 2011-12-14 16:31

使用 Bazaar 来管理源代码
来自: Livid's Paranoid

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
头像
TeliuTe
论坛版主
帖子: 7668
注册时间: 2007-11-25 13:29
系统: 16/18/20/w7
来自: 新疆博乐
联系:

Re: bzr 操作参考

#5

帖子 TeliuTe » 2011-12-14 16:32

具体如何使用 Bazaar?
来自:bemike.org

Bazzar 的命令跟 Subversion 类似,只是有时双方的说法不同。大家可以看看下面的例子,括号中的是 Subversion 的命令。

1.建立 Branch

假设我们把一个已有的目录 project 纳入版本控制。
cd project
bzr init (svnadmin create)
bzr add * (svn import URL PATH)

2. 删除一个文件

直接 del/rm filename 就可以,不需要像 Subversion 那样用特殊的命令。

3. commit 进度

bzr commit -m “your message here” (svn commit -m “your message here)

4. 取消对文件的修改

bzr revert filename (svn revert filename)

5. 发布 (publish) Branch 到远程主机

bzr push (svn commit)

6. checkout

bzr branch (svn checkout)

7. 更新 branch

bzr pull (svn update)

如果有一点版本控制系统的基础的话,看看这个 5 minutes guide 后,就可以轻松上手。
头像
TeliuTe
论坛版主
帖子: 7668
注册时间: 2007-11-25 13:29
系统: 16/18/20/w7
来自: 新疆博乐
联系:

Re: bzr 操作参考

#6

帖子 TeliuTe » 2011-12-14 16:33

bzr快速入门(1)
作者:yinwm

bzr有很多种使用方法,我们首先介绍集中式的使用方法,你可以假装他就是svn。

bzr的基本语法是
bzr 命令 [参数]

首先创建一个代码仓库
#bzr init-repo –no-tree ftp://user@host/repo-name
这里使用了ftp作为代码仓库的中心服务器,bzr支持的协议有很多ftp,sftp,http,bzr等等,我这里使用了ftp为了方便。
命令init-repo是创建代码仓库的命令,–no-tree是说明这个代码仓库本身的物理位置是不参与开发的。

然后创建项目,更精确的说是创建一个分支
#bzr init ftp://user@host/repo-name/proj1-trunk

然后checkout代码
#bzr checkout ftp://user@host/repo-name/proj1-trunk proj1
然后就是熟悉的场景了,可以随意的使用,折腾,捣乱,然后commit到中心代码库。其他的使用者也可以随时update获取最新的代码。
怎么样,跟svn一样吧,甚至连基本的命令都一样,比如commit/ci,update/up,revert,info,state/st。

这里面要注意一个问题,就是使用init命令创建的是一个分支,一个branch。
branch在bzr当中是非常重要的,如果你了解一些svn详细的东西,你会发现被管理的每一个目录都有一个叫做.svn的目录,也就是我们可以认为从任何的子目录开始都是一个完整的可以被单独checkout的小项目。

而bzr则不然,他只是在每一个branch的目录下才有一个.bzr目录,也就是从这一点开始,才是branch的根,下层的任何目录都不能成为一个单独的独立结构。

而这个branch是需要用init命令搞定的,不能想svn里面一样随随便便的就创建一个目录就完了。
头像
TeliuTe
论坛版主
帖子: 7668
注册时间: 2007-11-25 13:29
系统: 16/18/20/w7
来自: 新疆博乐
联系:

Re: bzr 操作参考

#7

帖子 TeliuTe » 2011-12-14 16:35

launchpad 上的bzr操作
作者:TeliuTe

本地部分:

1、安装 bzr:sudo apt-get install bzr

2、创建bzr配置文件: bzr whoami "TeliuTe <teliute@163.com>"

3、创建本地项目文件夹: mkdir gnome-user

4、创建测试文件:touch test1.txt

5、激活目录:bzr init 添加文件:bzr add 提交注释:bzr commit -m "Initial import"

6、修改文件: nano test1.txt

7、查看不同:bzr diff

8、更新文件:bzr commit -m "Added first line of text"
=====================================

launchpad 部分:

1、创建launchpad登录帐号

2、创建ssh密钥:

(1)sudo apt-get install openssh-client
(2) ssh-keygen -t rsa 生成的key在 /home/teliute/.ssh/id_rsa
(3)上传ssh key 到帐户里:https://launchpad.net/~teliute

3、登录launchpad: bzr launchpad-login teliute

4、上传项目:bzr push --use-existing lp:~teliute/teliute/gnome-user
头像
TeliuTe
论坛版主
帖子: 7668
注册时间: 2007-11-25 13:29
系统: 16/18/20/w7
来自: 新疆博乐
联系:

Re: bzr 操作参考

#8

帖子 TeliuTe » 2011-12-14 16:36

试用bzr
来自:汇程网

1、配置本地环境配置


2、初始仓库

md mybzr
cd mybzr
bzr init

3、发布到服务器

bzr push --create-prefix sftp://your.name@example.com/~/public_html/myproject


4、从服务器上checkout

bzr branch sftp://your.name@example.com/~/public_html/myproject

push 到服务器

bzr push sftp://your.name@example.com/~/public_html/myproject


5、本地产生分支

mybzr\cd ..

bzr branch mybzr newbzr

产生一个名为newbzr的分支


6、回到主干,查询差异

在newbzr下修改或新增内容

cd mybzr

bzr diff -r branch:../newbzr

7、合并

cd mybzr

bzr merge ../newbzr/

8、gtk界面

http://bazaar-vcs.org/bzr-gtk

todo:

1、用户认证

2、服务器仓库管理
头像
TeliuTe
论坛版主
帖子: 7668
注册时间: 2007-11-25 13:29
系统: 16/18/20/w7
来自: 新疆博乐
联系:

Re: bzr 操作参考

#9

帖子 TeliuTe » 2011-12-14 16:37

[备忘] 使用 bzr 仓库时的常用打包命令
by: LI Daobing

安装软件

$ sudo apt-get install bzr-builddeb

下载源码包

$ bzr clone lp:~lidaobing/ibus/ibus-hangul

更新上游包

$ cd ibus-hangul

$ uscan --force-download

合并到 bzr 仓库

$ bzr merge-upstream ../ibus-hangul-1.3.1.tar.gz --version 1.3.1

$ bzr commit

查看 bzr log

$ bzr log -n0 | less

编译并安装

$ debuild -i.bzr

$ debc

$ sudo debi

调整 changelog

$ dch

准备源码包

$ debuild -i.bzr -S -sa

用 pbuilder 测试源码包

$ cd ..

$ sudo pbuilder build ibus-hangul_1.3.1-1.dsc

打 tag, 提交代码

$ bzr tag debian-1.3.1-1

$ bzr push lp:~lidaobing/ibus/ibus-hangul
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: bzr 操作参考

#10

帖子 枫叶饭团 » 2011-12-14 18:25

canonical的git?我还是继续github。。。。
回复