是否可以将旧的导出文件集与subversion存储库进行比较?

时间:2008-12-22 22:58:23

标签: svn version-control export

问题在于:我们在subversion下进行了所有开发,但是我们的beta版本只是导出文件的混合部分,并非全部放在同一时间。或者,换句话说,我们对版本化文件进行了更改,然后当我们认为我们感到高兴时,我们只需将它们复制到不同的目录即可手动导出它们。

好吧,我们希望整个作品由Subversion管理,测试版作为行李箱头部的简单工作副本。我知道我可以从主干头开始,只需回滚特定区域,直到我到达相同的文件,但是知道每个文件需要回滚到哪个版本会很好。

是否存在这样一个工具,它将采用一组文件/目录并将其与存储库进行比较,为每个文件/目录提供修订号?如果没有,我将如何将脚本放在一起来执行此操作?

5 个答案:

答案 0 :(得分:1)

我同情你的问题,但这是一个你将不得不以不同方式解决的问题。

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

通常情况下,如果您使用常用的标签/分支/主干布局,那么当您发布内容时,您可以将主干的副本复制到标签目录的新子文件夹中。

这样你就不必试图弄清楚每个文件的版本是什么,Subversion会为你追踪它。

这就像是说“我知道我把车开进了一堵岩壁,但你可以帮我把车放回去吗?”。答案当然是避免开始进入岩壁。

据我所知,Subversion中没有任何功能可以告诉你磁盘文件的每个文件版本,所以要么制作一些脚本来测试每个文件的版本,或者你手动完成。

哦,是的,避免将来开车进入那堵岩壁。

答案 1 :(得分:0)

啊,是的! “Frankenversions”!

我建议使用CruiseControlHudson之类的构建管理系统。这些系统将为他们所做的每个构建创建一个标记(副本),因此您可以确保与您的某个构建对应的所有内容都是一致的版本。

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

答案 2 :(得分:0)

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

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

答案 3 :(得分: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

为所有文件完成后,新分支应该包含导出版本的工作副本。它很乱,但它应该让你到达你需要的地方。

答案 4 :(得分:0)

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

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

我打印出所有匹配的路径和修订号并手动整理(以防万一你有重复!),但是你想要svn cp命令将受控文件的分支设置为一个新目录