试图了解BZR存储库II

时间:2010-03-06 15:24:52

标签: bazaar

我想知道bzr init-repo Repobzr init-repo Repo --no-trees之间的区别。我已经尝试过了,似乎看不出有什么不同。

对于两者,我无法直接将文件添加到repo中(我必须先创建分支)。他们似乎对我的行为完全一样。

有人会解释我有什么区别吗?

编辑:谢谢大家的回答。但是,在我阅读你的答案后,我仍然不太了解实际的差异。

我做了一些实验,发现有/无树,我可以在存储库(bzr init)的旁边创建分支。 但只有带树的那个,我可以添加一个文件并提交。没有树的人,我只能从其他地方拉出来。

换句话说,没有树的那些是几乎只读的('几乎'因为你仍然可以从其他地方拉出新的分支)。 有什么用?性能是唯一的原因吗?

提前致谢。

3 个答案:

答案 0 :(得分:4)

为了更清楚地解释一下,-no-trees选项意味着不会为存储库中存储的任何分支保留工作树。

这是什么意思?

1)存储库不保存您的源文件。不相信我?将cd放入无树存储库中的分支,然后告诉我“ls”会给你带来什么。什么都没有。

现在,实际存储的是文件的历史记录,以便可以从该历史记录中重建文件。

2)由于没有工作树,您无法在无树存储库中工作。你自己发现了 - 你无法承诺。为什么不?因为文件不存在。只有他们的历史。

那么,无树存储库有什么用呢?如上所述,它们对中央服务器很有用。如果你和Bob正在从事一个项目,并且你并不总是能够从彼此的个人机器推/拉,或者你在一家公司想要一个最新的干净“干线”的地方工作,那么共享没有树库的服务器就是你的答案。

这是它的工作原理。您可以使用no-trees选项在共享服务器上创建存储库,然后将“trunk”导入存储库。

然后用bzr branch bzr + ssh:// mysharedserver / myrepo / trunk trunk_mirror

下拉“trunk”的最新副本

这会让你获得后备箱的“镜像”副本。然后,您可以为该新镜头,错误修正等创建该镜像副本的分支,提交您想要的所有内容。

现在你要出城了,鲍勃需要你的代码。由于它已经准备就绪,你可以将它合并到主干镜像中:

cd trunk_mirror bzr merge ../my_really_cool_feature_branch bzr commit“将我很酷的功能添加到主干” bzr push

最后一步将您的更改推送到镜像中继到共享存储库,Bob将能够“拉”并获取主干的最新副本。

答案 1 :(得分:2)

bzr中的主要单位是一个分支(使用bzr init创建)。

共享存储库(使用bzr init-repo创建)是在一个位置存储多个分支的历史记录并在此存储库中的所有分支之间共享此历史记录的附加内容。

标记--no-trees用于您的分支机构不需要工作树的情况。例如。在中央服务器上。因此,没有工作树的分支在磁盘上占用的空间非常小。

对于分支机构的本地工作,您肯定需要工作树,因此您需要使用树创建共享存储库。

答案 2 :(得分:0)

来自文档

  

如果使用--no-trees选项,那么默认情况下存储库中的分支将没有工作树。

工作树是bzr checkout

的结果

基本上......如果您想使用存储库并希望能够提交您正在进行的更改,那么您将需要一个工作树;)