1

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

1475|宠物/狗/GetName.sh

1476|priceLogic/CheckdogPrice.sh

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

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

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

有什么建议么?

4

3 回答 3

1

请不要采取错误的方式,但很有可能您还没有完全理解在 Subversion 中应该如何完成。

您永远不应该标记错过的匹配修订的混杂。颠覆标记应该基于某个分支或主干的统一修订。将标签视为您的存储库在某个时间点的快照。事实上,许多商店并不费心标记,而是简单地使用 Subversion 修订号。(“将修订版 14485 发送给 QA 进行测试”)。

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

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

所以,如果你让我知道你想做什么,我可能会指导你在 Subversion 中找到更好的方法。

于 2012-05-03T19:23:08.563 回答
1

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

我建议的行动方案是这样的:

确定代表 1.5 版的单个修订号。

根据您的问题,我怀疑您对此的后果不太清楚。如果您在修订版 128 提交文件 A 然后在修订版 129 提交文件 B 那么两个文件现在都在修订版 129。(假设您再次提交文件 A,得到修订版 130。现在,如果您将文件 A 回滚到修订版 129,您会得到什么?提交时存在于 128 的相同文件。)该图试图说明这一点。条形的顶部代表每个文件的最新提交,因此代表头部修订。这个头版本由文件 A 的 128、文件 B 的 129 和文件 C 的 126 组成。但是这个头版本也是版本 129。要掌握的一点是文件的当前版本不必(通常不)匹配文件的最新提交版本。在谈论头部修订时最容易看到这一点,但它同样适用于早期修订。什么构成修订版 125?嗯,文件 A 在 124 提交,文件 B 在 125 提交,文件 C 在 123 提交。因此,对于给定的版本,您必须确定包含所有最新提交的修订版。

Subversion 提交的可视化

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

一旦您确定了 1.5 版的单个修订号,请使用 svn branch/tag 命令指定已识别的修订号,而不是头修订号,作为标记的目标。

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

重复、冲洗和清洗,直到完成。

并发症

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


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

于 2012-05-04T16:30:21.353 回答
0

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

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

于 2012-05-03T14:40:05.767 回答