Svn 如何在Subversion中移动标记

Svn 如何在Subversion中移动标记,svn,Svn,我希望Subversion有一个更好的移动标签的方法。我知道移动标记的唯一方法是从标记中删除文件,然后再次复制它。修订树浏览器似乎不能很好地处理这个问题。这还需要保持主干下的目录结构与标记同步 用例:我们有数千个“地图”,我们想标记每个地图的哪个版本是“生产”版本。我们需要能够轻松获得所有地图的生产版本 有人能提出更好的方法来解决我们的用例吗? 我也考虑过属性,但我们无法轻松获得所有文件的prod版本。合并到标签似乎也不是很容易。 (最初发布到)我认为没有必要从生产标签中“删除”该文件。您应该将

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

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

有人能提出更好的方法来解决我们的用例吗? 我也考虑过属性,但我们无法轻松获得所有文件的prod版本。合并到标签似乎也不是很容易。 (最初发布到)

我认为没有必要从生产标签中“删除”该文件。您应该将新文件复制到现有文件上,然后将其签入。这样你就能保存历史了


当然,要做到这一点,您需要签出生产标签。

我不认为您可以用subversion的操作方式来做到这一点。我相信最好的解决方案是寻找一种适合您的用例的工具。您的生产系统可以“拉”入已接受的“地图”。虽然我意识到这不是subversion,但使用git可能比使用svn更符合您的使用模式

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


还有一些关于如何开始迁移的教程,比如。

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

这对subversion不是一个好的用途

Subversion标记用于为树的实例命名,如其历史记录中的特定快照,并且应该保持静态

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

今天的版本可以在

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

一种方法是转向“稳定主干”模式

  • 从主干上做一个分支,用作您的工作区
  • 停止直接向主干做出承诺——让每个人都切换到开发分支
  • 由管理稳定版本的人员检查trunk,确保他们具有提交权限
  • 当您希望“释放”一个映射时,使用“重新集成合并”将更改拉入该文件/目录并提交更改
这可能看起来有点颠倒,但相当可行。您可以让生产机器直接从主干中拉出,或者为每个版本从主干中制作一个新标签。对于后者,您将需要某种方式将新标签传达给生产机器。某种类型的消息传递、共享配置或命名约定可能会起作用


但是请注意,在这个模型中,您必须进入主干有点“神圣”的思维模式。

如果我很好地理解您的需求,我认为最好的方法是将所有映射作为主干的外部,然后制作一个脚本,递归地将每个映射(外部)标记到工作副本中的当前版本(或者服务器,如果您希望这样做)。

我认为您试图解决错误的问题

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

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

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

然后,随着下一个版本的maps获得批准,svn将它们复制到您的发布分支。我假设您不想使用merge,因为maps是一个离散元素,而不是源代码

在下一版本中,您可以再次标记


现在,您知道了最新的approved maps是什么,以及每个版本中都有哪些内容。如果您真的记不起最新的版本号,并且您可以在不查看标记目录的情况下找到您需要知道的时间,您可以创建一个标记,svn cp最新版本,然后在下一个版本时将其吹走并重新复制。

保留生产分支(或使用主干进行生产)需要额外的工作来保持两个目录结构的同步,因此这不是一个很好的解决方案,除非有一个自动脚本将目录复制到生产区域,并且该脚本经常运行。每个映射都是一个独立的文件,因此一次只发送几个到生产,我们不会将所有更改一起发送到prod。(类似的设置是网站HTML文件的目录结构——文件被更改并独立发送到prod。)这需要手动(或使用脚本)保持目录结构同步。向下投票,因为它没有回答提出的问题和标题。@danorton:在最初的向下投票中理解;但是,老实说,我不相信subversion维护给定存储库的修订历史的方式能够做到这一点。据我所知,目标是能够移动标记;但是,svn将添加标记视为存储库的新修订版,而不是调整git存储的内部图形。如果您有适合使用的建议,我很乐意投票支持,但您必须首先提交。