5

在 svn 领域长期露营后,我开始使用 bazaar。我以前也有过 cvs 的经验,我偶尔也会使用标签。

使用 svn,一旦你发布了一个版本,你就可以将你的 trunk 复制到标签中,例如 svn copy trunk tags/1.2.0 。在 bazaar 中,我创建了相同的存储库结构,但是没有 bzr 复制选项和 bzr 标签的存在让我思考。

事实是我发现标签要么很难使用,要么没用。如果我使用标签,我基本上将我的主干作为唯一的目录,当我达到里程碑时,我会对其进行标签。然后,当达到新的里程碑时,我会继续开发和标记。这使以下任务复杂化:

  • 递归地比较新版本和旧版本(使用类似 svn 的方法:diff --brief -r)
  • 修复旧版本,并创建增加补丁版本的新版本(使用类似 svn 的方法:svn 复制 2.0.0 2.0.1,然后将修复添加到 2.0.1 并提交)
  • 无需检查即可获得所需的版本(如果您以类似 svn 的方式检查整个树,则您拥有所有版本和分支,并且只执行一次)

结果,我在 bzr 中使用了相同的 svn repo 结构,并且每次都对主干进行物理复制。这意味着在这种安排中我看不到 bzr tag 命令的任何实际用途。如果每个版本都包含所有版本号,为什么我应该用版本号标记整个 repo 版本?

谁能指出我在使用和理解 bzr repo 的标签时做错了什么?


编辑

所以据我所知,这个概念是每个版本都有不同的 bzr 分支(独立分支,来自主干通过 bzr 分支)。它就像svn,只是你没有将根目录放在存储库中。我仍然没有真正看到标签的任何特殊原因,除了如果你说 foo-1.0.0 foo-1.0.1 foo-2.0.0 foo-2.1.0 trunk

并假设我总是在分支之前标记版本,主干将为所有版本添加标签,而 foo-2.0.0 的标签中将包含 foo-1.0.0,但没有 foo-1.0.1,因为它是从 foo-1.0 分支的.0.

我仍然没有真正看到拥有和使用标签的必要性。我的标签隐含在我为该分支选择的目录名称中。我对特定的版本号并不真正感兴趣,我只是对它进入特定目录感兴趣。

4

3 回答 3

12

bzr 中的标签是什么?

标签只是特定版本的一个易于记忆的句柄。您可以参考您的标签,而不是尝试记住david@hrcsb.org-20090420170402-eql4vzvcifkz4fwy或 revno :19721

bzr export -r tag:foo-1.0.0.0 release-foo-1.0.0.0.tar.gz trunk/

我如何管理 bzr 中的发布?

听起来好像您将发布视为单独的开发线(又名:分支),所以我建议您标记您的主干,以便您知道您从哪里分支并创建单独的发布分支:

bzr tag -r 1234 -d trunk/ foo-1.0.0.0 
bzr branch -r 1234 trunk/ release-1.x

当您为 1.x 版本进行错误修复时,您可以在 release-1.x 分支中进行,并标记每个点版本:

bzr tag -r 1255 -d release-1.x/ foo-1.0.0.1
bzr export -r tag:foo-1.0.0.1 release-foo-1.0.0.1.tar.gz release-1.x/

您的目录结构可能如下所示:

fooproj/
  release-1.x/
  release-2.x/
  trunk/
于 2009-04-22T13:28:35.107 回答
8

好吧,基本上,您不应该尝试复制 SVN 目录结构。我不知道为什么 SVN 会这样,但基本上标签只是您 bzr 存储库中某个时间点的标记。当您想针对标签进行比较时,可以这样做

bzr diff -r tag:TAG_NAME

因此,每当您发布版本时,只需标记它并按您的方式进行。没有什么比将某些东西移动到特定文件夹或任何东西更特别的了。

我建议您开始使用单独的分支而不是标签来处理您想要返回的内容,例如代码的 2.0.x 行,这样您就有一个 2.0.x 的分支,然后是 2.0 之类的标签.0 和 2.0.1 在里面。

另外,请查看http://bazaar-vcs.org/Specs/Tagging

于 2009-04-22T13:12:30.310 回答
1

svn 中的标签更像是 svn 分支。您已经描述了很好地映射到 bzr 分支的工作流程。标签允许你有一个分支指向你的发布,所以任何人都可以从主干获得准确的发布版本:

bzr 分支树干 foo-1.0 -r tag:1.0

于 2009-04-24T19:25:12.040 回答