cleartool/clearcase でカスタム diff ツールを使用する方法はありますか?
質問
クリアケースのスナップショット ビューで作業するときに独自の差分を使用したいと考えています。
私の知る限り、実行時に 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スクリプトます。
以下は、指定されたファイルの以前のバージョンを取得するためのキーコードです。
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
使ってみてはいかがでしょうか このトリック:
空のファイルを作成する
% touch empty
バージョン A の取得
% cleartool diff -ser empty File@@/main/28 > A
バージョン B の取得
% cleartool diff -ser empty File@@/main/29 > B
差分&利益!
% 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>