我希望Subversion有更好的移动标签的方法。我知道移动标记的唯一方法是从标记中删除文件,然后再次复制它。修订树浏览器似乎不能很好地处理它。这还需要保持主干和标签下的目录结构同步。
使用案例:我们有数以千计的“地图”,我们希望标记每个地图的哪个版本是“生产”版本。我们需要能够轻松获得所有地图的生产版本。
有人能建议更好的方法来解决我们的用例吗? 我也考虑了属性但是我们无法轻易获得所有文件的prod版本。合并到标签似乎也不是很容易。 (最初发布到http://jamesjava.blogspot.com/2007/12/subversion-moving-tags.html)
答案 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)
一种方法是转向“稳定主干”模式。
这可能看起来有点颠倒,但相当可行。您可以让生产机器直接从主干拉出,也可以从每个版本的主干中制作新标签。对于后者,您需要一些方法将新标签传递给生产机器。某种消息传递,共享配置或命名约定可以起作用。
但请注意,在这个模型中,你必须进入主干的心态,这有些“神圣”。
答案 6 :(得分:0)
如果我理解你的需求,我认为最好的方法是将所有地图作为主干的外部,然后制作一个脚本,以递归方式将每个地图(外部)标记为它的当前修订版。工作副本(或服务器,如果你想这样)。