クリアケーススナップショットビューで作業するときは、独自の差分を使用したいと思います。
私が見る限り、「cleartool diff
」の実行時にdiffツールを指定する方法がないため、「mydiff <predecessor file> <modified file in my view>
」のようなものを実行できると考えていましたが、十分に知りませんClearCaseを使用して、比較する「先行ファイル」を見つけることができます。
これを行う方法はありますか?
(これまで、ウィンドウに関する最初の2つの応答を読んだ後)これがUnix上にあることを忘れていました。ClearCaseの設定をいじることは許可されていません。
ここでの提案に基づいて、別の方法で作業しました。 cleartoolの「get」コマンドを発見したので、これを実行して以前のバージョンを一時ファイルに取得します。
cleartool get -to fname.temp fname @@ predecessor
次に、diffを実行して、そのファイルを削除します。
すべての提案をありがとう。
外部差分ツールを指定するには、「 ファイルの変更map 」、「c:\ program files\rational\ClearCase\lib\mgrs」
Paulが提案したWinMergeは、実際にそのファイルを変更します。
各マップ行には、CCファイルタイプ、CCアクション、およびアプリケーションの3つの部分があります。
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ツールで選択した実行可能ファイル で置き換えることができます。
これで完全なコマンドラインに移動したい場合(私はこれが好きです;-))、小さな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
fileとは関係ありません。
ここでは、ファイル(パラメーターとして)と実行する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";
もう1つのオプションは、 Git + ClearCase (または this または this を参照)を使用し、Gitとの差分だけにすることです。
これは非常に簡単にセットアップでき、私の経験では、CCを21世紀のツールにしようとするよりも、2つのVCSシステムを一度に使用する方が実際に脳を痛めます。
GitをCCとdiffの間の橋渡しと考えてください:-)
誰かがすでにsnip2codeでそれについて考えているようです!
ここで、必要なことを正確に行うtcsh bashスクリプトを示します。
Custom-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} &
Kdiff には統合が組み込まれています。ツールを開きます-[設定]-> [構成]-> [統合]に移動し、[ClearCaseと統合]ボタンをクリックします。このツールは優れた3ウェイdiffサポートを持ち、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
または選択した毒でcleartool diff crudを簡単に切り取ることができます。
ClearCaseの完全版!
私は通常このように進みます。
統合された差分の場合cleartool diff -pred <my file>
グラフィカルな差分の場合cleartool diff -pred -g <my file>
「WinMerge」(無料の差分ツール)をインストールし、それ自体をクリアケース差分ツールとしてインストールしました。どのようにそれが行われたかはわかりません。
前述のWinMergeは、ClearCaseのインストールを自動的に検出し、Clearcaseインストールパスのマップファイルを変更します。
WinMergeのインストールでは必要なすべての行項目が変更されなかったため、ClearCaseが独自のdiffツールを開くという問題が発生しました。したがって、必要に応じて手動で修正できるように、ClearCaseのドキュメントを読むことをお勧めします。
私にとってこれはうまく機能します:
%vimdiff my_file.c my_file.c@@/main/LATEST