如何在 clearcase 文件的所有版本中进行文本搜索?

How do I do a text search across all versions of a clearcase file?

背景

在 Clearcase 中,您可以通过在 linux 终端中输入以下命令来获取文件的图形版本树。

ct lsvtree -gra <filename>

这将打开一个界面,其中包含许多选项,用于查看文件两个版本之间的差异。

问题

从图形树界面,我试图查找某个字符串是否存在于文件的任何版本中。这个字符串在某个时候丢失了,我想弄清楚 "somepoint" 在哪里。

问题

我如何 运行 在 clearcase 文件的所有版本中进行文本搜索?

如果您使用动态视图,则可以利用它通过版本扩展命名访问元素版本的方式。以 "foo.c@@/main/branch/1" 为例,您将 "foo.c@@" 作为目录结构 的 根目录,其中 "main" 和 "branch" 是子目录, “1”是 "file"

您可以通过执行以下操作来使用它:

  • cd 到 "foo.c@@"
  • 执行搜索。

例如:

cd foo.c@@
grep -rl "target-string" *

获取没有字符串的文件:

cd foo.c@@
grep -rlv "target-string" *

您也可以使用 lsvtree 输出来支持脚本中的搜索,但以上是执行此操作的最简单技巧。这适用于 Unix 和 Windows,但如果您的目标字符串包含多个单词,您可能想要使用标准 Windows "findstr" 以外的其他内容,因为 findstr 对它们的处理很奇怪:findstr "foo bar oof" 将打印包含 "foo"、"bar" 或 "oof" 的行,有时甚至在使用 /L for "literal" 时也是如此。

如果您使用的是快照或 Web 视图,这会比较棘手,并且需要一个脚本来迭代 lsvtree 的输出。

正如我在 ClearCase 中 mentioned before (2015), there is no equivalent to a git log -S or -G (pickaxe search)

完成镐搜索(在 Git 中)以指出添加或删除字符串的过去修订。
但是:您需要为 ClearCase 编写等效功能的脚本。

cleartool lsvtree shows you all the version of a given file, you can, starting with the most recent version do a cleartool annotate 开始查看添加该行的时间和版本。
如果该行包含您的字符串,那么此版本将是相关的。

如果最新版本不包含您的字符串,则对之前的版本重复该过程(如果之前的版本包含您的字符串,请执行 cleartool annotate)。