集市上的标签有什么意义?

时间:2009-04-22 12:20:57

标签: svn version-control bazaar

我在svn领域长时间露营后开始使用集市。我之前也有使用cvs的经验,偶尔也会使用标签。

使用svn,一旦发布版本,就可以将trunk的svn副本执行到标记中,例如svn copy trunk tags / 1.2.0。在集市中我创建了相同的存储库结构,但缺少bzr复制选项和bzr标记的存在让我思考。

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

  • 递归地比较新版本与旧版本(使用类似svn的方法:diff --brief -r)
  • 修复旧版本,并创建新版本及其补丁版本增加(使用类似svn的方法:svn copy 2.0.0 2.0.1,然后将修复程序添加到2.0.1并提交)
  • 获取您想要的版本而不必检查它(如果您在svn中查看整个树,您拥有所有版本和分支,并且您只执行一次)

因此,我在bzr中使用相同的svn repo结构,并且每次都执行主干的物理副本。这意味着在这种安排中我没有看到任何真正使用bzr标记命令。为什么我应该用版本号标记整个repo版本,如果它包含每个版本的所有版本?

有人可以指出我在使用和理解bzr回购标签时遇到的错误吗?


修改

因此,据我所知,每个版本都有不同的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。

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

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分: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

答案 2 :(得分:1)

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

bzr branch trunk foo-1.0 -r tag:1.0