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