2

问题是:我们的所有开发都在 subversion 下,但我们的 beta 版本只是一些杂乱无章的导出文件,它们并没有同时放在那里。或者,换一种说法,我们对版本化文件进行更改,然后当我们认为满意时,我们通过简单地将它们复制到不同的目录来手动导出它们。

好吧,我们希望整个作品都由 Subversion 管理,而 beta 版本作为树干头部的简单工作副本。我知道我可以从主干头开始,然后简单地回滚特定区域,直到我到达相同的文件,但很高兴知道每个文件需要回滚到哪个修订版。

是否存在这样的工具,它将获取一组文件/目录并将其与存储库进行比较,为每个文件/目录提供修订号?如果没有,我将如何将脚本放在一起来做到这一点?

4

5 回答 5

1

我对您的问题表示同情,但这是您将来必须以不同的方式解决的问题。

Subversion 有一个“目录副本”的概念,它是轻量级的,根本不占用存储库中的太多空间。

通常,如果您使用标签/分支/主干的常用布局,那么当您发布某些内容时,您会将主干复制到标签目录的新子文件夹中。

这样你就不必在事后试图找出每个文件的版本,Subversion 会为你跟踪它。

这很像说“我知道我的车撞到了岩壁上,但你能帮我把车放回去吗?”。答案当然是一开始就避免开车撞到岩壁上。

据我所知,Subversion 中没有任何功能可以告诉您磁盘上的文件看起来像每个文件的哪个版本,因此您要么制作一些脚本来逐个测试每个文件的版本,要么您做它手动。

哦,是的,以后不要开车撞到那堵岩壁上。

于 2008-12-22T23:15:23.997 回答
0

是啊!“弗兰肯版本”!

这是我推荐像CruiseControlHudson这样的构建管理系统的地方。这些系统将为他们所做的每个构建创建一个标签(副本),因此您可以放心,与您的一个构建对应的所有内容都是一致的。

我喜欢将代码添加到我的构建脚本中,甚至从 CruiseControl 获取构建号并将它们放入我的构建中(比如我的“关于”文件、我的程序集元数据等)。这将使您可以轻松地交叉引用您的实际工作软件和 svn 中的内容。

于 2008-12-22T23:10:10.140 回答
0

您可以尝试使用SharpSvn编写一个工具来执行此操作。您面临的挑战是找出与您的文件相对应的存储库 url。之后,您可以获取日志,并针对该文件的日志调用 diff 的每个修订来验证它是否不同。

同样,我认为您必须解决的最大问题是找到每个文件的 Subversion URL

于 2009-05-13T21:55:21.933 回答
0

我想扩展桑德在上面的回答并坚持到底。

使用遵循以下算法的 SharpSvn 库创建一个工具。

FOR EACH of the exported files
  ITERATE backwards through the revisions of that file
  IF the revisioned file matches your exported copy
    SVN COPY that revisioned file to another branch

为所有文件完成此操作后,您的新分支应该具有导出版本的工作副本。这很混乱,但它应该能让你到达你需要的地方。

于 2009-05-22T16:19:51.923 回答
0

忘记 SharpSVN,还有 perl 和 python 绑定也可以,或者你可以在 bash 中使用 svn 命令行。毕竟你说的是脚本。

如果使用命令行,您需要在目录树中搜索等效文件,然后使用 svn log 命令获取单个文件的修订号列表;您还需要 svn diff 命令(使用 -r 选项)将您的文件与 repo 中的修订版进行比较。

我会打印出所有匹配的路径和修订号并手动整理它(以防万一您有重复!),但您希望 svn cp 命令将受控文件的分支创建到新目录。

于 2009-05-22T16:37:37.830 回答