使用命令在SVN中标记多个文件

时间:2012-05-03 14:22:09

标签: svn

我有一个包含版本和文件名的文件列表,如下所示,

1475 | PET /狗/ GetName.sh

1476 | priceLogic / CheckdogPrice.sh

这只是一个小集合,它可以扩展到更大的数字。

我想为特定版本标记它们,并希望在svn中使用单个命令标记它们,否则我需要一次标记它们。

我想过使用更改列表,但这无法帮助我携带文件的版本号。

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

请不要采取错误的方式,但很可能你不太了解Subversion应该怎么做。

你永远不应该标记错过匹配修订版的混搭。 Subversion标记应该基于某个分支或者干线的统一修订。将标记视为特定时间点的存储库快照。事实上,许多商店都不打扰标签,而只是使用Subversion版本号。 (“将修订版14485发送到QA以进行测试”)。

问题是为什么你需要这样做。我可以想到人们尝试做稀疏标记的几个原因:

  • 他们想要一个已修改的文件列表。您可以使用svn diff --summarize来执行此操作。
  • 他们在工作区中检查了各种文件的各种版本。在这种情况下,您应该根据特定版本处理分支,并将这些更改放在分支中。
  • 他们用于CVS,不想浪费时间来标记所有内容。在CVS中,标记cat需要30到40分钟,在大型存储库中可能更长。但是,Subversion标记基于指向特定URL和修订的链接。 Subversion中的标记快速而轻松,因此您只需标记所有内容。

所以,如果你让我知道你想做什么,我或许可以引导你在Subversion中更好地做到这一点。

答案 1 :(得分:1)

根据你的问题和你在David W的回答下的评论,让我重申一下我的想法:为了简单起见,我们假设您刚刚发布了产品的1.6版,并且你做得很好,即你创建了一个1.6标签,一切都很好,从那里前进。但是您的团队没有遵循最佳实践,并且您没有版本1.5,版本1.4或之前的任何标签,并且您预见到您将不可避免地需要返回到一个或多个先前的修订版以修复错误或其他原因

我建议的行动方案如下:

标识代表版本1.5的单个版本号。

从你的问题我怀疑你对此的影响并不十分清楚。如果您在修订版128中提交文件A,然后在修订版129中提交文件B,则这两个文件现在都在修订版129 。 (假设您再次提交文件A,获得修订版130.现在,如果您将文件A回滚到修订版129,您会得到什么?当您提交文件时,存在于128的同一文件。)该图试图说明这一点。条形的顶部代表每个文件的最新提交,因此代表头部修订。这个头版本包括128个用于文件A,129个用于文件B,126个用于文件C. 但是这个头版本也是修订版129. 需要掌握的是当前版本< / strong>文件不必(通常不)匹配文件的最新提交的修订版。在讨论头部修订时最容易看到这一点,但它同样适用于早期版本。什么是修订版125?好吧,它是在文件A提交到124,文件B在125,文件C在123时。因此对于给定的版本,您必须标识包含所有最新提交的修订。

Visualization of Subversion commits

将标记应用于标识的修订号。

确定版本1.5的单个修订号后,使用svn branch / tag命令指定标识的修订号,而不是标题修订号作为标记的目标。

对要标记的每个先前版本重复上述操作。

重复,冲洗并洗涤,直到完成。

<强>并发症

上述程序应该大多数时间。但是,有时您可能希望标记混合修订版。请注意,根据我的示例,128和129 构成混合版本。例如,混合版本将是文件A在124处,文件B在127处。您可以通过将工作副本更新为该混合版本来标记混合版本,然后根据您的工作副本创建标记。


有关此特定主题的更多信息,您可能还想查看我在Simple-Talk.com上发布的 TortoiseSVN和Subversion Cookbook part 6

答案 2 :(得分:0)

没有标准的命令方式从列表中读取并执行。如果您的整个主干中的所有文件都有相同的版本,则可以轻松标记。

可以做的是一个小的perl / bash脚本,可以将具有相应修订的列表中的所有文件复制到公共标记文件夹中。