如何在Subversion中移动标签

时间:2008-09-15 12:49:57

标签: svn

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

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

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

7 个答案:

答案 0 :(得分:3)

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

关于为什么git的基于拉动的开发模型与您的方案更匹配的一个非常好的写法是here

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

答案 1 :(得分:2)

我认为没有必要从生产代码中“删除”该文件。您应该将新文件复制到现有文件并将其签入。这样您就可以保留历史记录。

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

答案 2 :(得分:1)

这不适用于颠覆。

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

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

今天的版本可以在

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

答案 3 :(得分:1)

我认为你正试图解决错误的问题。

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

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

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

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

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

现在您知道,最新批准的地图是什么以及每个版本中包含的内容。如果您确实无法记住最新的版本号,并且您可以在不查看标签目录的情况下想出您需要知道的时间,那么您可以创建一个svn cp的标签最新版本,然后将其吹走并在下次发布时重新复制。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

  • 从行李箱分支作为工作区域使用。
  • 停止直接向主干提交 - 让每个人都切换到开发分支。
  • 管理稳定版本的人员检查中继,确保他们具有提交权限。
  • 当您希望“释放”地图时,请使用“reintegrate merge”将更改提取到该文件/目录并提交更改。

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

但请注意,在这个模型中,你必须进入主干的心态,这有些“神圣”。

答案 6 :(得分:0)

如果我理解你的需求,我认为最好的方法是将所有地图作为主干的外部,然后制作一个脚本,以递归方式将每个地图(外部)标记为它的当前修订版。工作副本(或服务器,如果你想这样)。