【问题标题】:How do I move tags in Subversion如何在 Subversion 中移动标签
【发布时间】:2008-09-15 12:49:56
【问题描述】:

我希望 Subversion 有更好的移动标签的方法。我知道移动标签的唯一方法是从标签中删除文件,然后再次复制。修订树浏览器似乎不能很好地处理这个问题。这也需要保持主干和标签下的目录结构同步。

用例:我们有数千个“地图”,我们想要标记每个地图的哪个版本是“生产”版本。我们需要能够轻松获得所有地图的生产版本。

谁能提出更好的方法来解决我们的用例? 我也考虑了属性,但是我们无法轻松获得所有文件的 prod 版本。合并到标签似乎也不是很容易。 (原发于http://jamesjava.blogspot.com/2007/12/subversion-moving-tags.html)

【问题讨论】:

  • 保持生产分支(或使用主干进行生产)需要额外的工作来保持两个目录结构同步,因此这不是一个很好的解决方案,除非有一个自动脚本将目录复制到生产区域,并且该脚本经常运行。
  • 每个地图都是一个独立的文件,因此一次只有少数几个被发送到生产环境,我们不会将所有更改一起发送到生产环境。 (类似的设置是网站的 HTML 文件的目录结构——文件被更改并独立发送到 prod。)

标签: svn


【解决方案1】:

我认为你永远无法以颠覆的运作方式做到这一点。我相信最好的解决方案是查看像 git 这样的工具,它似乎适合您的用例。您的生产系统可以“拉入”被接受的“地图”。虽然我意识到这不是颠覆,但使用 git 可能比 svn 更符合您的使用模式。

关于为什么 git 的基于 pull 的开发模型更适合您的场景的一篇非常好的文章是 here。

还有关于如何开始迁移的教程,例如this。

【讨论】:

  • 投了反对票,因为它没有回答提出和标题的问题。
  • @danorton:在最初的反对票中理解;但是,老实说,我不相信 subversion 维护给定存储库的修订历史的方式是可能的。据我了解,目标是能够 move 标签;但是,svn 将添加标签视为存储库的新修订,而不是调整 git 存储的内部图。如果您有适合该用法的建议,我很乐意投票,但您必须先提交。
【解决方案2】:

我认为不需要从生产标签中“删除”该文件。您应该将新文件复制到现有文件上并签入。这样您将保留历史记录。

当然,您需要签出生产标签才能执行此操作。

【讨论】:

    【解决方案3】:

    这不是颠覆的好用处。

    Subversion 标签用于为树的实例命名,就像其历史中的特定快照一样,应保持静态。

    也许您可以使用当前日期或递增数字作为标签的一部分?您可以在包含任何特定日期的生产版本的标签下有一个目录。以最新日期作为当前生产版本。

    今天的版本可以在

    找到
    /svn/tags/production/2008/09/15/mapproject
    

    【讨论】:

      【解决方案4】:

      我认为您正在尝试解决错误的问题。

      听起来您有一个包含尚未发布的地图版本的主干,当您发布时,您想从主干上所有可能的更新中挑选要更新的地图。

      假设是这种情况,创建一个名为“Release”的分支。 (考虑创建一个新的空目录,并复制所需的每个地图版本(使用单独的 svn cp 命令),如果这样会更快)。

      现在您在分支中有当前版本。用“Release XXX”标记它(svn cp 整个目录),其中 XXX 是您最新版本的有意义的 ID。

      然后,当地图被批准用于下一个版本时,将它们 svn cp 到您的发布分支。我假设您不想使用合并,因为映射离散元素而不是源代码。

      下次发布时,可以再次标记。

      现在您知道最新批准的地图是什么以及每个版本中的内容。如果你真的不记得最新的版本号,并且你可以想出一个你需要知道的时间而不只是查看标签目录,你可以创建一个标签 svn cp最新版本,然后在发布下一个版本时将其删除并重新复制。

      【讨论】:

      • 这需要手动(或使用脚本)保持目录结构同步。
      【解决方案5】:

      为什么不为当前的生产版本制作一个新标签?请记住,Subversion 不是 CVS。因此,制作完整目录树的副本不会花费您任何费用。

      【讨论】:

        【解决方案6】:

        一种方法是转向“稳定的主干”模型。

        • 从主干创建一个分支,用作您的工作区。
        • 停止直接向主干提交 - 让每个人都切换到开发分支。
        • 让管理稳定版本的人员检查主干,确保他们拥有提交权限。
        • 当您希望“发布”地图时,请使用“重新集成合并”将更改拉入该文件/目录并提交更改。

        这可能看起来有点颠倒,但相当可行。您可以让生产机器直接从主干中提取,或者为每个版本从主干制作一个新标签。对于后者,您将需要某种方式将新标签传达给生产机器。某种消息传递、共享配置或命名约定可能会起作用。

        但请注意,在此模型中,您必须进入树干有点“神圣”的心态。

        【讨论】:

          【解决方案7】:

          如果我能很好地理解您的需求,我认为最好的方法是将所有地图作为主干的外部,然后制作一个脚本,将每个地图(外部)递归标记到它在工作副本(或服务器,如果你愿意的话)。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-05
            • 1970-01-01
            • 1970-01-01
            • 2010-12-31
            • 2011-02-13
            • 2021-10-21
            • 2022-01-09
            • 2015-04-21
            相关资源
            最近更新 更多