背景
在Clearcase中,您可以通过在linux终端中输入以下命令来获取文件的图形版本树。
ct lsvtree -gra <filename>
这会打开一个界面,其中包含许多选项,可以查看文件的两个版本之间的差异。
问题
从图形树界面,我试图找到任何版本的文件中是否存在字符串。这个字符串在某些时候丢失了,我想知道那个“某点”的位置。
题
如何在clearcase的所有文件版本中运行文本搜索?
正如我mentioned before(2015),在ClearCase中没有相当于git log -S or -G
(pickaxe search)。
该镐搜索已完成(在Git中)以指出已添加或删除字符串的过去修订版。 但是:您需要为ClearCase编写等效功能的脚本。
由于cleartool lsvtree
会显示给定文件的所有版本,因此您可以从最新版本开始执行cleartool annotate
,以查看何时以及在哪个版本中添加了该行。
如果该行包含您的字符串,那么此版本将是相关的。
如果最新版本不包含您的字符串,则使用以前的版本重复该过程(如果它包含您的字符串,请在该先前版本上执行cleartool annotate
)。
如果使用动态视图,则可以利用它通过版本扩展命名访问元素版本的方式。以“foo.c @@ / main / branch / 1”为例,你有“foo.c @@”作为目录结构的根,“main”和“branch”是子目录,“1”是一个“文件”
您可以通过执行以下操作来使用此功能:
例如:
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表示“文字”。
如果您正在使用快照或Web视图,这会非常棘手,并且需要一个脚本来迭代lsvtree的输出。