Yuan Yijun (bbbush) wrote,
Yuan Yijun
bbbush

bzr, Bazaar, DVCS (was: 郁闷.. 几个 ftp 都不好用)

想用 bzr,因为觉得自己玩不转 git 之类。

gro 使用 sftp,没有 ssh,可是很容易连不上
sftp://bbbush@fedora.gro.clinux.org/groups/fedora/htdocs/rpms.bzr/
http://fedora.gro.clinux.org/rpms.bzr/

bluedj 使用 ftp,不支持隐藏文件:可以创建和删除,却没法读取

最后还是跑到 fedorapeople 去了。
sftp://bbbush@fedorapeople.org/home/fedora/bbbush/public_html/rpms.bzr/
http://bbbush.fedorapeople.org/rpms.bzr/




看看 gro 有多糟糕。不允许同时有多个连接?
[yuan@mstar rpms.bzr]$ bzr init-repo --no-trees sftp://bbbush@fedora.gro.clinux.org/groups/fedora/htdocs/rpms.bzr/
[yuan@mstar rpms.bzr]$ bzr init sftp://bbbush@fedora.gro.clinux.org/groups/fedora/htdocs/rpms.bzr/devel/

[yuan@mstar ~]$ bzr checkout --lightweight sftp://bbbush@fedora.gro.clinux.org/groups/fedora/htdocs/rpms.bzr/devel rpms.bzr.devel
Received disconnect from 211.91.135.167: 2: fork failed: Resource temporarily unavailable
bzr: ERROR: Unable to connect to SSH host fedora.gro.clinux.org:22; EOF during negotiation
/usr/lib/python2.5/site-packages/bzrlib/lockable_files.py:110: UserWarning: file group LockableFiles(<bzrlib.transport.local.LocalTransport url=file:///home/yuan/rpms.bzr.devel/.bzr/checkout/>) was not explicitly unlocked
  warn("file group %r was not explicitly unlocked" % self)

用 lftp 可以很容易地使用 sftp,然后把坏掉的 lock 清理掉(I guess so)。




原来 branch 不是我想象的那种东西,而我需要的大概是 shared repo
http://bazaar-vcs.org/SharedRepository
http://bazaar-vcs.org/SharedRepositoryTutorial
http://bazaar-vcs.org/SharedRepositoryLayouts

按照教程做了一下,而且用了 bzr checkout 而不是 branch 来建立本地工作目录,结果发现 bzr ci 速度很慢…… 去看 .bzr/branch/branch.conf,发现和 branch 时不一样,不是 push/master 地址,而是 bind 地址。
http://bazaar-vcs.org/CheckoutTutorial
http://bazaar-vcs.org/BzrUsingBoundBranches

这样,概念一下子就串起来了。checkout 和 branch 的区别在于 bind,即本地和远程同步。在 visual studio 集成 VSS 的时候,如果到代码仓库的网速太慢,不先 unbind 的话做什么都不方便。



做了好多次实验,终于知道了怎么 resolve 一个简单的 conflict: 两个 branch 分别添加相同的文件。需要一个 branch 里 commit,另一个 branch 里 update,然后会提示 file rename。被 rename 的是仓库里的文件。如果 revert,那么本地的文件会被删掉,变成已经 commit 到仓库里的内容:所以不可以在 update 之后轻易地运行 revert。

大家都在做高级的版本管理,我却连最传统的做法都搞不好。

rawhide 的 bzr 一下子从 0.91 升级到了 1.0rc3,眼看着 1.0 就要发布了。默认的仓库格式在 0.92 时从 knit 变成了 pack,本来大概是每个文件会对应一个 knit 文件的,现在整个仓库就只有几个 pack 文件:文件数量少了许多。本来一个仓库要占 18M 空间,现在只要 6.8M 了,.bzr 目录的 overhead 变得非常小。这样对网络传输应该有利,可是文件的操作是不是会变复杂呢。根据 ubuntu 的某个 issue,使用 pack 之后时间竟然从 5s 变成了 6s;根据 fedora 的某个 benchmark,hosted.fp.o 使用了 smart server 之后时间可以从 1m40s 变成 25s,比 rsync 的 16s 也相去不远。真是矛盾的事情!

bzr reconcile && bzr upgrade,我在做 upgrade 时不小心按了 ctrl-c,这时它的 .bzr backup 竟然还没有做完,却也没告诉我……于是我用 backup 覆盖了 .bzr…… 这点真失败 :(

一段有趣的话:

If there is a repository in a parent directory of the location, then
the history of the branch will be stored in the repository. Otherwise
init creates a standalone branch which carries its own history
in the .bzr directory.

怪不得 1.推荐的分支方法是直接在子目录中分支; 2.使用 shared repo 可以共享存储空间。这样一层一层地分支下去,目录结构就是分支结构,真有意思!不过,这样分支也就要求子目录命名时要小心,不要和分支冲突:然而哪儿会有那么巧的事。

bzr 比 cvs 好用许多。虽然一个 branch 里只有一个 .bzr 目录,但是在任何位置都可以 bzr ci。不知道它在向上搜索父目录时会不会出问题:杞人忧天。这样真的是合理利用了文件系统的树结构呢。

另一个相当好用的地方,是 bzr xxxx --help 和 bzr help xxxx 的效果完全相同。如果是 cvs 就总是会搞混了。


bzr reconfigure --help

Purpose: Reconfigure the type of a bzr directory.
Usage:   bzr reconfigure [LOCATION]

Options:
  --force               Perform reconfiguration even if local changes will be
                        lost.
  -v, --verbose         Display more information.
  -q, --quiet           Only display errors and warnings.
  --bind-to=ARG         Branch to bind checkout to.
  -h, --help            Show help message.

  Target type:
    --branch            Reconfigure to a branch.
    --checkout          Reconfigure to a checkout.
    --lightweight-checkout
                        Reconfigure to a lightweight checkout.
    --tree              Reconfigure to a tree.

Description:
  A target configuration must be specified.

  For checkouts, the bind-to location will be auto-detected if not specified.
  The order of preference is
  1. For a lightweight checkout, the current bound location.
  2. For branches that used to be checkouts, the previously-bound location.
  3. The push location.
  4. The parent location.
  If none of these is available, --bind-to must be specified.


原来还有这个命令可以用。先前很疑惑为什么 .bzr/branch/branch.conf 中有时候是 bind,有时候是 push,有时候是 parent location,而且 checkout, branch 和 tree 的概念很模糊。现在大概知道了:一个 branch 只有 .bzr,一个 tree 包含 branch,一个 checkout 是设置了 bind location 的 branch 或者 tree。默认用 bzr branch 得到的目录是 tree,用 bzr init-repo --no-tree 时 1. 如果是在 repo 中那么得到的是 branch,2. 如果不是在 repo 中仍然会得到 tree。
http://bazaar-vcs.org/DataStructures

一个 rich root 和一个 repo 的区别呢?bzr 1.0 引入的 rich root 说是 bzr2svn 转换时的概念。

怎么备份一个 repo?看到 bzrtools 提供了 multi-pull 命令,可是不会用。



update:
2007-12-14 Bazaar 1.0 发布
http://bazaar-vcs.org/
http://bazaar-vcs.org/Download
http://www.linux-watch.com/news/NS7185318863.html
希望早日看到新版本的 benchmark,因为很多比较 DVCS/SCM 的文章都是去年了。
这一篇 Linus 论 git 的文章比较新,Aug 2007: http://lwn.net/Articles/246381/ clarification on git, central repositories and commit access lists

今天早晨,我完成了 ubuntu launchpad 网站的帐号注册。大概那里改版了,要签个 CoC 协议,和 fedora CLA 类似不过简单许多,都是道德上的考量。签的时候 GPG 过期,折腾了好久才把新的传上去。

今天是 zhlly 考试的日子。前些天她考了会计,这些天又考金融,一直没有闲着。
Tags: fedora
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments