【问题标题】:svn: differences between tags and a revision number referencesvn:标签和修订号参考之间的差异
【发布时间】:2009-10-30 22:02:18
【问题描述】:

这是一个与What do you use the svn tags directory for anyways? 相似但不相同的问题;这里有一些我想了解的微妙之处。

除了以下特点:

  • 使用名称而不是编号引用文件树的特定状态
  • 通过更改特定的/subtree/tags/{tag_name} 目录来修改名称-号码关联(但保留其历史记录)
  • 使用svn switch 将您的工作副本更新为特定标签

你还能/应该用标签做什么?

如果所有标签都是在特定存储库修订中拍摄特定子树根的快照,从技术上讲,您可以:

  • 使用/subtree/trunksubtree/branches 没有 /subtree/tags 目录
  • /subtree/trunk 目录上创建属性,例如tag:Release_1.0 = 309tag:Release_1.1 = 496

你会有一个名称-编号映射,带有修订历史,工具程序可以读取....只是现在 svn 工具集使用/subtree/tags/ 约定来处理一些事情。

是否有任何理由将文件放入/subtree/tags/ 目录中,而这些文件并非都来自同一版本的主干?

【问题讨论】:

    标签: svn tags


    【解决方案1】:

    是否有任何理由将文件放入 /subtree/tags/ 目录中,而不是所有来自同一版本的主干?

    是的,当然。

    假设修订版 R 被标记为 1.0 版,并且每个人都高兴地在树干上破解。现在支持确定 1.0 中的特定错误已在修订版 (R+n) 中的文件 foo.cpp 中修复,并且该修复是一个独立的修复,不需要对其他文件进行任何更改。他们现在可以做的是创建一个版本 1.1,它是 1.0(以前是修订版 R)的副本,除了 foo.cpp,他们使用修订版 (R+n),因此他们在 1.1 中进行了修复。

    【讨论】:

      【解决方案2】:

      标签不维护名称/编号映射。存储库修订号是全局的,因此无论何时更改任何文件,无论它是否位于主干/分支/标签上,该编号都会增加。标记的价值在于,因为您不提交它(按照惯例;这不是 SVN 强制执行的),标记的树将始终与您标记它时相同,即使您获得 HEAD 修订版当你拉下标签目录时。

      【讨论】:

      • “标记的树将始终与您标记时相同”->但我可以使用修订号来做到这一点。
      【解决方案3】:

      最初没有

      我会说你正在获得对 svn 工作原理的准确理解。标签、分支和目录没有什么神奇之处。这都是 svn 中的单一集成机制。

      但是稍后... 调整哪个文件被哪个标签覆盖是正常的过程。想象一下发布。虽然发布最初可能会获得单个存储库版本的标签,但关键修复、撤回的功能和其他正常的发布工程活动自然会导致标签根据需要向前和向后移动。

      【讨论】:

      • 不相信移动标签的事情。您应该仅在即将发布时标记,然后仅在发布灾难性失败时重新标记。否则,使用带有新标签的新版本号。
      • 当然,但这只是意味着标签很可能会匹配一个分支,对吧?最初的问题是关于树干的,我可以看到树干和标签有很大的不同......
      【解决方案4】:

      Subversion 中的标签是文件的集合。这是一个约定,不再。基本上,Subversion 人员编写了一种制作廉价副本的方法,将其用于分支,然后决定与其为标签实现第二种机制,不如他们已经完全足够,重用这个概念对用户来说意味着更少的事情学习和工具制造商必须与之交互的一件事。

      【讨论】:

        猜你喜欢
        • 2015-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 2019-07-09
        • 1970-01-01
        • 2022-11-30
        相关资源
        最近更新 更多