任何使用cleartool / clearcase自定义diff工具的方法?

我想在清晰的快照视图中使用自己的diff。

据我所知,在运行“ cleartool diff ”时没有办法指定diff工具,所以我想我可以运行“ mydiff <predecessor file> <modified file in my view> ”,但是我不知道对ClearCase能够find“前辈文件”进行分析的知识还不够多。

任何方式来做到这一点?

忘了提及(到目前为止,在阅读前两个处理窗口的回答之后),这是在Unix上,我不允许使用ClearCaseconfiguration。

如何更改默认差异工具

您可以在“c:\ program files \ rational \ ClearCase \ lib \ mgrs”中修改文件映射来指定一个外部diff工具。

Paul提出的WinMerge实际上修改了这个文件。

每个地图线有3个部分:CC文件types,CC动作和应用程序。

在地图文件中findtext_file_delta文件types的部分。 在那里,你会发现CC动作比较,xcompare,merge和xmerge,如下所示:

 text_file_delta compare ..\..\bin\cleardiff.exe text_file_delta xcompare ..\..\bin\cleardiffmrg.exe text_file_delta merge ..\..\bin\cleardiff.exe text_file_delta xmerge ..\..\bin\cleardiffmrg.exe 

你可以用diff工具select的可执行文件replace它们。


或者,一个简单的差异脚本

如果你想完整的命令行(我喜欢;-)),一个小的ccperl可以帮助:

 #!/bin/perl my ($file, $switches) = @ARGV; $switches ||= '-ubBw'; my ($element, $version, $pred) = split(/;/,`cleartool describe -fmt '%En;%Vn;%PVn' $file`); unless ($pred) { die "ctdiff: $file has no predecessor\n"; } exec "mydiff $switches $element\@\@$pred $file"; 

警告:只能在dynamic视图( M:\... ,而不是快照视图( c:\... )中访问扩展path名( @@\... c:\... )。

该脚本与上面提供的map文件无关:

  • 该文件定义“types合并pipe理器”。
  • 此脚本允许您在任何想要的文件上运行任何合并pipe理器,而无需读取任何映射文件即可查找给定文件使用的正确diff文件。

在这里,您向脚本提供了两个信息:文件(作为参数)和diff exe(在脚本实现中:用任何你想要的diff来replacemydiff )。


或者,改进的差异脚本(也可以在静态/快照视图中工作)

这是一个适用于快照和dynamic视图的脚本版本。

对于快照视图,我使用chacmool的build议: cleartool get

再次,您可以用您select的工具replace此脚本中包含的diff命令。

 #!/bin/perl my ($file, $switches) = @ARGV; $switches ||= '-u'; my ($element, $version, $pred) = split(/;/,`cleartool describe -fmt '%En;%Vn;%PVn' $file`); unless ($pred) { die "ctdiff: $file has no predecessor\n"; } # figure out if view is dynamic or snapshot my $str1 = `cleartool lsview -long -cview`; if($? == 0) { dodie("pred.pl must be executed within a clearcase view"); } my @ary1 = grep(/Global path:/, split(/\n/, $str1)); if($str1 =~ /View attributes: snapshot/sm) { $is_snapshot = 1; } my $predfile = "$element\@\@$pred"; $predfile =~ s/\'//g;#' #printf("$predfile\n"); if ($is_snapshot) { my $predtemp = "c:\\temp\\pred.txt"; unlink($predtemp); my $cmd = "cleartool get -to $predtemp $predfile"; printf("$cmd\n"); my $str2 = `$cmd`; $predfile = $predtemp; } sub dodie { my $message = $_[0]; print($message . "\n"); exit 1; } exec "diff $switches $predfile $file"; 

另一个select是使用Git + ClearCase (或者看看这个或者这个 ),然后用Git来比较。

这个build立起来非常容易,而且根据我的经验,它实际上让你的大脑更容易伤害到一次使用两个VCS系统,而不是试图击败CC成为一个21世纪的工具。

只要想到Git是CC和diff之间的桥梁:-)

看来有人已经在snip2code上想过了!
这里有一个tcsh bash脚本,它正是你想要的。

自定义的Diff-工具换的ClearCase对象

如您所见,以下是获取给定文件的以前版本的关键代码:

cleartool descr -pred -short $1

$1是要比较的文件名。


 #!/bin/tcsh -e set _CLEARCASE_VIEW = `cleartool pwv -short -setview` echo Set view: "$_CLEARCASE_VIEW" set my_firstversion = "" set my_secondversion = "" set my_difftool = kdiff3 # check clearcase view if ( "$_CLEARCASE_VIEW" == "** NONE **" ) then echo "Error: ClearCase view not set, aborted." exit -1 endif if ( "$1" == "" ) then echo "Error: missing 1st file argument!" echo "Eg: `basename $0` file1.txt -> This will diff file1.txt with its previous version" echo "Eg: `basename $0` file1.txt file2.txt -> This will diff file1.txt and file2.txt" exit -1 endif set my_firstversion = "$1" echo "my_firstversion=$my_firstversion" if ( "$2" == "" ) then echo "No 2nd file passed, calculating previous version of $my_firstversion" set my_secondversion = $my_firstversion@@`cleartool descr -pred -short $my_firstversion` else echo "Setting 2nd file to $2" set my_secondversion = "$2" endif echo "my_secondversion=$my_secondversion" ${my_difftool} ${my_firstversion} ${my_secondversion} & 

Kdiff3已经build成了整合。 打开工具 – 进入设置 – >configuration – >集成,然后单击“与ClearCase集成”button。 这个工具具有出色的3路差异支持,处理UTF-8和这种自动化的集成,你不必担心地图文件中的元素types等。

基于这里的build议,我有另一种方法工作。 我发现了cleartool“get”命令,所以我执行这个命令将以前的版本转换为临时文件:

cleartool get -to fname.temp fname @@ predecessor

然后运行我的差异,并删除该文件。

感谢所有的build议。

以下是关于更改ClearCase XML diff工具的IBM文档的链接:

更改XML差异/合并typespipe理器

http://www-01.ibm.com/support/docview.wss?rs=984&uid=swg21256807

你可以尝试使用这个技巧 :

  1. 创build一个空文件

    % touch empty

  2. 检索版本A.

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

  3. 检索版本B.

    % cleartool diff -ser empty File@@/main/29 > B

  4. 差异和利润!

    % your-diff-here AB

把它放在一个脚本,使选项更灵活一点,你有它。

如果你想要的话,你可以轻易地用一点awk或者cut或者perl或者你select的毒药来把cleartool diff crud弄掉。

为ClearCase万岁!

我安装了“WinMerge”(一个免费的差异工具),它将自己安装为clearcase diff工具。 我不确定它是如何做到的。

所提到的WinMerge会自动检测ClearCase的安装并修改Clearcase安装path中的映射文件。

我遇到过的问题ClearCase将打开自己的差异工具,而不是因为WinMerge安装并没有改变所有需要的项目。 因此,阅读ClearCase的文档是一个好主意,所以如果需要的话可以手动修复它。

对我来说这很好用:

 %vimdiff my_file.c my_file.c@@/main/LATEST 

我通常是这样的。

对于统一的diff cleartool diff -pred <my file>

对于graphics差异cleartool diff -pred -g <my file>