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

Ste*_*ini 5 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-like检查整个树,你有所有版本和分支,你只做一次)

因此,我在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

假设我总是在分支之前标记版本,trunk将为所有这些版本添加标签,而foo-2.0.0在其标签中将包含foo-1.0.0,但不包括foo-1.0.1,因为它是从foo-1.0分支的0.0.

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

vez*_*ult 12

什么是bzr中的标签?

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

bzr export -r tag:foo-1.0.0.0 release-foo-1.0.0.0.tar.gz trunk/
Run Code Online (Sandbox Code Playgroud)

我如何管理bzr中的版本?

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

bzr tag -r 1234 -d trunk/ foo-1.0.0.0 
bzr branch -r 1234 trunk/ release-1.x
Run Code Online (Sandbox Code Playgroud)

当您为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/
Run Code Online (Sandbox Code Playgroud)

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

fooproj/
  release-1.x/
  release-2.x/
  trunk/
Run Code Online (Sandbox Code Playgroud)


mik*_*ikl 8

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

bzr diff -r tag:TAG_NAME
Run Code Online (Sandbox Code Playgroud)

所以每当你发布一个版本时,只需标记它并在你的路上.没有什么特别的东西可以将东西移到特定文件夹或任何东西

我建议你开始使用单独的分支而不是标签来表示你想要回到的东西,比如代码的2.0.x行,所以你有2.0.x的分支,然后是2.0的标签其中.0和2.0.1.

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