2

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

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

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

4

7 回答 7

2

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

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

于 2008-09-15T12:55:15.517 回答
2

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

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

还有关于如何像这样开始迁移的教程。

于 2008-09-15T12:58:39.987 回答
1

这不是颠覆的好用处。

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

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

今天的版本可以在

/svn/tags/production/2008/09/15/mapproject
于 2008-09-15T13:06:28.610 回答
1

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

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

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

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

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

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

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

于 2009-03-19T04:13:07.843 回答
0

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

于 2008-09-15T13:03:29.040 回答
0

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

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

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

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

于 2008-09-15T13:51:22.887 回答
0

如果我很了解您的需求,我认为最好的方法是将所有地图作为主干的外部,然后制作一个脚本,将每个地图(外部)递归标记到工作副本中的当前修订版(或者服务器,如果你想要那样的话)。

于 2008-09-15T14:12:22.040 回答