【问题标题】:What's the point of tags in bazaar?集市中的标签有什么意义?
【发布时间】:2009-04-22 12:20:57
【问题描述】:

在 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 后备箱

假设我总是在分支之前标记发布,主干将为所有这些标记,而 foo-2.0.0 在其标记中将有 foo-1.0.0,但没有 foo-1.0.1,因为它是从foo-1.0.0.

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

【问题讨论】:

    标签: svn version-control bazaar


    【解决方案1】:

    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/
    

    【讨论】:

    • 是的,但是如果我没有理由需要它,我认为轻松记住特定修订没有任何意义。修订是增量的,但它们唯一的特殊事实是它们是按时间排序的。发布时的顺序不同,因为我可以在 3.0.0 发布后很好地发布 2.0.1。
    • 您的标签几乎看起来像 GUID。 :)
    • 是的,它们刚刚发布了 1.0、2.0 等。我被重要的版本片段迷住了,我喜欢一有机会就使用 foo,所以我把它扔了。;o )
    【解决方案2】:

    嗯,基本上,您不应该尝试复制 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

    【讨论】:

      【解决方案3】:

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

      bzr branch trunk foo-1.0 -r tag:1.0

      【讨论】:

        猜你喜欢
        • 2010-11-28
        • 2020-03-21
        • 1970-01-01
        • 1970-01-01
        • 2014-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-02
        相关资源
        最近更新 更多