51

在明文快照视图中工作时,我想使用自己的差异。

据我所见,运行“ cleartool diff”时无法指定差异工具,所以我想我可以运行“ mydiff <predecessor file> <modified file in my view>”之类的东西,但我对 ClearCase 的了解还不够,无法找到“前身”文件”进行比较。

有什么办法可以做到这一点?

忘了提(直到现在,在阅读了处理 windows 的前两个响应之后)这是在 Unix 上,并且我不允许使用 ClearCase 配置。

4

11 回答 11

61

如何更改默认差异工具

您可以通过修改文件映射来指定外部差异工具,在“c:\program files\rational\ClearCase\lib\mgrs”

Paul 建议的 WinMerge 实际上修改了该文件。

每个地图行包含 3 个部分:CC 文件类型、CC 操作和应用程序。

在映射文件中查找 text_file_delta 文件类型的部分。在那里,您将找到 CC 操作 compare、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

您可以将它们替换为您选择的差异工具的可执行文件


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

如果您想对此使用完整的命令行(我喜欢 ;-)),一点 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";

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

map该脚本与上述文件无关:

  • 该文件定义了“类型合并管理器”。
  • 此脚本允许您在所需的任何文件上运行任何合并管理器,而无需读取任何映射文件来查找用于给定文件的正确 diff exe。

在这里,您向脚本提供两个信息:文件(作为参数)和要运行的 diff exe(在脚本实现中:替换mydiff为您想要的任何 diff exe)。


或者,改进的差异脚本(也适用于静态/快照视图)

这是此脚本的一个版本,适用于快照和动态视图。

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

同样,您可以用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";
于 2008-12-17T17:58:20.493 回答
6

另一种选择是使用Git+ClearCase(或查看thisthis)并与 Git 进行比较。

这非常容易设置,并且根据我的经验,一次使用两个 VCS 系统实际上比试图击败 CC 成为 21 世纪的工具更伤脑筋。

只需将 Git 视为 CC 和 diff 之间的桥梁 :-)

于 2008-12-17T22:32:33.123 回答
5

似乎有人已经在 snip2code 上考虑过了!
这是一个 tcsh bash 脚本,它完全符合您的要求。

自定义 diff-tool-for-clearcase-object

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

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} &
于 2013-09-19T08:23:18.613 回答
5

Kdiff3已内置集成。打开工具 - 转到设置 --> 配置 --> 集成,然后单击“与 ClearCase 集成”按钮。该工具具有出色的 3 路差异支持,处理 UTF-8,并且通过这种自动集成,您不必担心地图文件中的元素类型等。

于 2013-09-30T11:25:25.740 回答
3

根据这里的建议,我得到了另一种工作方式。我发现了 cleartool "get" 命令,所以我执行这个命令来获取以前的版本到一个临时文件:

cleartool get -to fname.temp fname@@predecessor

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

感谢所有的建议。

于 2008-12-18T16:02:58.480 回答
3

以下是有关更改 ClearCase XML 差异工具的 IBM 文档的链接:

更改 XML 差异/合并类型管理器

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

于 2010-09-10T14:53:43.187 回答
1

你可以尝试使用这个技巧

  1. 创建一个空文件

    % 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 A B

把它放在一个脚本中,使选项更灵活一点,就可以了。

awk如果你愿意,你可以用一点或cutperl或你选择的毒药轻松地剪掉 cleartool diff crud 。

ClearCase 万岁!

于 2008-12-17T22:28:31.867 回答
1

对我来说,这很好用:

%vimdiff my_file.c my_file.c@@/main/LATEST
于 2010-11-15T09:35:14.297 回答
0

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

于 2008-12-17T17:56:49.450 回答
0

如前所述,WinMerge 会自动检测 ClearCase 的安装并修改 Clearcase 安装路径中的映射文件。

我遇到的问题是 ClearCase 将打开它自己的差异工具,因为 WinMerge 安装没有更改所有必要的行项目。因此,最好阅读 ClearCase 的文档,以便在需要时手动修复它。

于 2009-02-23T17:35:20.383 回答
0

我通常是这样进行的。

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

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

于 2015-01-05T17:52:46.340 回答