2008-09-15 77 views
1

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

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

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

+0

保留一个生产分支(或使用生产树干)需要额外的工作来保持两个目录结构的同步,所以这不是一个很好的解决方案,除非有一个将目录复制到生产区域的自动脚本,并且该脚本经常跑。 – 2008-09-15 14:32:41

+0

每张地图都是一个独立的文件,因此一次只能发送少量数据到生产环境,而我们不会将所有更改发送到一起。 (一个类似的设置将是一个网站的HTML文件的目录结构 - 文件被更改并发送到独立产品。) – 2008-09-15 14:38:39

回答

2

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

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

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

+1

向下投票,因为它没有回答提出和标题的问题。 – danorton 2011-06-03 20:22:28

2

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

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

0

为什么不为当前生产版本制作新标签?请记住,Subversion不是CVS。所以制作一个完整的目录树的副本不需要花费任何东西。

1

这不适用于颠覆。

Subversion标记用于为历史记录中的特定快照提供树的实例的名称,并且应保持静态。

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

今天的版本可以在

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

一种方法来发现将移动到“稳定干线”的模式。

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

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

但请注意,在这个模型中,你必须进入树干的思维模式有些“神圣”。

0

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

1

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

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

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

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

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

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

现在你知道,最新批准的地图是什么以及每个版本中的内容。如果你真的不记得最新版本号,并且你可以想出一个你不需要查看标签目录就需要知道的时间,那么你可以创建一个标签,其中包含svn cp的最新版本,然后吹当你做下一个版本时,它会被重新复制。