在ClearCase中,如何从命令行查看静态视图中的旧版本文件?

时间:2008-10-07 01:02:15

标签: clearcase

在静态视图中,如何查看旧版本的文件?

给定一个空文件(在此示例中称为empty)我可以颠覆diff以显示旧版本:

    % cleartool diff -ser empty File@@/main/28

这感觉就像一个非常丑陋的黑客。我错过了一个更基本的命令吗?有没有更简洁的方法来做到这一点?

(我不想编辑配置规范 - 这非常繁琐,而且我正在尝试查看一堆旧版本。)

澄清:我想将文件的版本发送到stdout,所以我可以将它与Unix的其余部分(grep,sed等)一起使用。如果你发现了这个问题因为您正在寻找一种将元素版本保存到文件的方法,请参阅Brian's answer

5 个答案:

答案 0 :(得分:14)

  

我正在尝试查看一堆旧版本

我不确定你是否在谈论一个文件的“一堆旧版本”,“几个文件中的一堆旧版本。” p>

要显示一个文件的几个旧版本,最简单的意思是显示其版本树(ct lsvtree -graph File),然后选择一个版本,右键单击它并“编辑Send To”它接受多个文件(如Notepad ++)。只需点击几下,您就可以看到那些旧版本 注意:您必须具有CC6.0或7.0.1 IFix01(7.0.0和7.0.1无法'发送到'文件,并显示以下错误消息“Access to unnamed file was denied”)

但为了可视化不同文件的几个旧版本,我建议使用动态视图并编辑该视图的配置规范(而不是您当前使用的快照视图),以便快速选择所有这些旧文件(希望通过一个简单的选择规则,如“element * aLabel”)


[来自评论:]

  

“cat”早期修改文件的惯用方法是什么?

惯用法是通过动态视图(使用与现有快照视图完全相同的配置规范进行配置)。

然后,您可以浏览(如在'更改目录中')文件的各种扩展路径

如果您想要捕获文件分支的所有版本,请进入:

cd /view/MyView/vobs/myVobs/myPath/myFile@@/main/[...]/maBranch
cat 1
cat 2
...
cat x

'1','2',...'x'是该分支内文件的版本1,2,... x。


对于快照视图扩展路径无法访问,因此您的“黑客”是可行的方法。

然而,这里有2条评论:

  • 要快速显示给定分支中快照文件的所有先前修订版,您可以键入:

(复制粘贴的一行版本,Unix语法:)

cleartool find addon.xml -ver 'brtype(aBranch) && !version(.../aBranch/LATEST) && ! version(.../aBranch/0)' -exec 'cleartool diff -ser empty "$CLEARCASE_XPN"'

(可读性的多行版本:)

cleartool find addon.xml -ver 'brtype(aBranch) && 
                               !version(.../aBranch/LATEST) && 
                               ! version(.../aBranch/0)' 
          -exec 'cleartool diff -ser empty "$CLEARCASE_XPN"'
  • 您可以使用
  • 快速获得更好的输出

(复制粘贴的一行版本,Unix语法:)

cleartool find addon.xml -ver 'brtype(aBranch) && !version(.../aBranch/LATEST) && ! version(.../aBranch/0)' -exec 'cleartool diff -ser empty "$CLEARCASE_XPN"' | ccperl -nle '$a=$_; $b = $a; $b =~ s/^>+\s(?:file\s+\d+:\s+)?//g;print $b if $a =~/^>/'

(可读性的多行版本:)

cleartool find addon.xml -ver 'brtype(aBranch) && 
                               !version(.../aBranch/LATEST) && 
                               ! version(.../aBranch/0)' 
         -exec 'cleartool diff -ser empty "$CLEARCASE_XPN"'
| ccperl -nle '$a=$_; $b = $a; 
               $b =~ s/^>+\s(?:file\s+\d+:\s+)?//g;
               print $b if $a =~/^>/'

这样,输出就更好了。


"cleartool get" command (man page) mentioned below Brian不执行stdout:

  

get命令仅将文件元素复制到视图中。

     

在UNIX或Linux系统上,将/dev/hello_world/foo.c@@/main/2复制到当前目录中。

cmd-context get –to foo.c.temp /dev/hello_world/foo.c@@/main/2
  

在Windows系统上,将\dev\hello_world\foo.c@@\main\2复制到C:\build目录。

cmd-context get –to C:\build\foo.c.temp \dev\hello_world\foo.c@@\main\2

或许,通过将结果传递给cat(或Windows中的type),您可以对所述cattype的输出执行某些操作。 )命令。

cmd-context get –to C:\build\foo.c.temp \dev\hello_world\foo.c@@\main\2 | type C:\build\foo.c.temp 

答案 1 :(得分:12)

我知道这是一个老线程...但是我不能让这个颠簸得不到解决....

静态视图有一个“ct get”命令,可以完全满足您的要求。

cleartool get -to ~/foo File@@/main/28

会将此版本的文件保存在~/foo

答案 2 :(得分:2)

[根据第一条评论重写]

Clearcase中的所有文件(包括版本)都可在虚拟目录结构中使用。我对静态视图并不熟悉,但我相信它们仍然通过虚拟fs;他们只是以不同的方式更新。

在这种情况下,您可以这样做:

   cat File@@/main/28

如果您还必须找到包含该文件元素的正确版本的目录,那么它可能会变得很难看。我们有一个PERL脚本正在使用这种方法来分析对文件所做的历史更改,我们很快就用尽了Windows上的命令行空间来实际运行命令!

答案 3 :(得分:1)

如果File是一个Clearcase元素,并且cat File有效,并且视图设置正确,请尝试:

cat File@@/main/28

(注意:没有ct shell - 如果您已经在视图中,则不应该这样做。)

尝试输入:

ct ls -l File

如果它显示的文件扩展名与上面类似,那么你应该能够使用扩展名来捕获文件。

答案 4 :(得分:-1)

ct shell cat File @@ version