任何使用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
你可以尝试使用这个技巧 :
-
创build一个空文件
% touch empty
-
检索版本A.
% cleartool diff -ser empty File@@/main/28 > A
-
检索版本B.
% cleartool diff -ser empty File@@/main/29 > B
-
差异和利润!
% 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>