cleartool/clearcase でカスタム diff ツールを使用する方法はありますか?

StackOverflow https://stackoverflow.com/questions/375398

  •  22-08-2019
  •  | 
  •  

質問

クリアケースのスナップショット ビューで作業するときに独自の差分を使用したいと考えています。

私の知る限り、実行時に diff ツールを指定する方法はありません。cleartool diff" なので、" のようなものを実行できると考えていました。mydiff <predecessor file> <modified file in my view>」とありますが、差分対象の「先行ファイル」を見つけることができるほど、ClearCase についての知識がありません。

これを行う方法はありますか?

これは Unix 上にあるため、ClearCase の設定をいじることは許可されていないことを (Windows に関する最初の 2 つの回答を読んだ今まで) 言い忘れていました。

役に立ちましたか?

解決 5

私はここの提案に基づいて作業を別の方法を得ました。私はのcleartoolコマンドを「取得」を発見したので、私は一時ファイルに以前のバージョンを取得するには、これを実行します:

のcleartool GET -to fname.temp fnameは@@前身

そして、私の差分を実行し、そのファイルを削除します。

すべての提案をお寄せいただきありがとうございます。

他のヒント

デフォルトの差分ツールを変更する方法

外部の差分ツールを指定するには、 ファイルを変更する 地図, 、「c:\program files ational\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

それらを次のように置き換えることができます。 diff ツールで選択した実行ファイル.


または、単純な diff スクリプト

これを完全なコマンドラインで実行したい場合 (私はこれが好きです ;-) )、ちょっとした 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 を使用して)。


または、改善された diff スクリプト (静的/スナップショット ビューでも機能します)

これは、スナップショットと動的ビューの両方で機能するこのスクリプトのバージョンです。

スナップショット ビューの場合は、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";

別のオプションを使用することもできます Git+ClearCase (または参照 これ または これ) そして Git で diff するだけです。

これはセットアップが非常に簡単で、私の経験では、CC を 21 世紀のツールに押し上げようとするよりも、2 つの VCS システムを同時に使用する方が脳への負担は少ないです。

Git を CC と diff の間のブリッジとして考えてください :-)

誰かがすでにsnip2codeにそれについて考えているようだ!
正確に何をしたいんここでtcshのbashスクリプトます。

カスタムデフツール -

の-の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のには、統合に組み込まれています。ツールを開く - >統合とボタン「ClearCaseと統合」をクリック - > [設定 - [設定]に進みます。このツールは、優れた3ウェイデフサポートしている、UTF-8処理し、この自動化された統合を使用すると、マップ・ファイル内の要素の種類などを心配する必要はありません。

ClearCase XML diff ツールの変更に関する IBM ドキュメントへのリンクは次のとおりです。

XML Diff/Merge Type Manager の変更

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

使ってみてはいかがでしょうか このトリック:

  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 または cut または perl またはあなたの選択の毒。

クリアケース万歳!

私は「WinMergeの」(自由差分ツール)をインストールし、それがClearCaseの差分ツールとしての地位を設置。私はそれはそれをしたかどうかはわかりません。

WinMergeのインストールパスのClearCaseのインストールを検出し、自動的に上述とClearCaseにマップファイルを変更している。

私はWinMergeのインストールがすべてneccessaryラインアイテムを変更していないので、ClearCaseのではなく、独自の差分ツールを開きますされた問題を経験しています。だから、必要であればそう、あなたがそれを手動で修正することができますClearCaseのためのドキュメントを読むことをお勧めします。

私にはこれがうまく動作ます:

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

私は通常、次のように進みます。

unified diff形式の場合 cleartool diff -pred <my file>

グラフィカル差分について cleartool diff -pred -g <my file>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top