Подтвердить что ты не робот

Любой способ использования специального инструмента сравнения с cleartool/clearcase?

Я хотел бы использовать свой собственный diff при работе в виде снимка в режиме очистки.

Насколько я вижу, нет способа указать инструмент diff при запуске "cleartool diff", поэтому я думал, что могу запустить что-то вроде "mydiff <predecessor file> <modified file in my view>", но я не знаю достаточно о ClearCase, чтобы иметь возможность находить "файл предшественника" для сравнения.

Как это сделать?

Забыл упомянуть (до сих пор, после прочтения первых двух ответов, касающихся окон), что это в Unix, и мне не разрешено смешивать конфигурацию ClearCase.

4b9b3361

Ответ 1

У меня есть другой способ работы, основанный на предложениях здесь. Я обнаружил команду cleartool "get", поэтому я выполняю ее, чтобы получить предыдущую версию временного файла:

cleartool get -to fname.temp fname @@predecessor

Затем запустите мой diff и удалите этот файл.

Спасибо за все предложения.

Ответ 2

Как изменить инструменты разворота по умолчанию

Вы можете указать внешний инструмент сравнения изменение файла map в "c:\program files\рациональное\ClearCase\Lib\МГРС"

WinMerge, предложенный Paul, фактически модифицирует этот файл.

Каждая карта имеет 3 части: тип файла CC, действие CC и приложение.

Найдите раздел в файле карты для типов файлов text_file_delta. Там вы найдете строки для сравнения действий 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 script

Если вы хотите использовать полную командную строку (что мне нравится;-)), немного 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:\...).

script не имеет ничего общего с файлом map, представленным выше:

  • этот файл определяет "Type Merge Managers".
  • Этот script позволяет вам запускать любой менеджер слияния для любого файла, который вы хотите, без чтения какого-либо файла карты, чтобы искать подходящий diff exe для использования для данного файла.

Здесь вы предоставляете script обе информации: файл (как параметр) и diff exe для запуска (в рамках реализации script: замените mydiff на любой другой вариант, который вы хотите).


Или, улучшенный diff script (также работает в представлении статического/моментального снимка)

Вот версия этого script, которая работает как для моментального снимка, так и для динамического просмотра.

Для представления моментального снимка я использую предложение chacmool: cleartool get.

Опять же, вы можете заменить команду diff, включенную в этот script инструментом по вашему выбору.

#!/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";

Ответ 3

Другой вариант - использовать Git + ClearCase (или посмотреть это или это) и просто сравнивать с Git.

Это удивительно легко установить, и, по моему опыту, на самом деле ваш мозг меньше болит при использовании двух систем VCS одновременно, чем при попытке превратить CC в инструмент 21-го века.

Просто думайте о Git как о мосте между CC и diff :-)

Ответ 4

Кажется, кто-то уже думал об этом на snip2code!
Здесь tcsh bash script, который делает именно то, что вы хотите.

Custom-diff-tool-for-clearcase-object

Как вы можете видеть, следующее key code, чтобы получить предыдущую версию данного файла:

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 = [email protected]@`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} &

Ответ 5

Kdiff3 имеет встроенную интеграцию. Откройте инструмент - перейдите в Настройки → Настроить → Интеграция и нажмите кнопку "Интегрировать с помощью ClearCase". Этот инструмент имеет отличную трехстороннюю поддержку diff, обрабатывает UTF-8 и с этой автоматической интеграцией вам не нужно беспокоиться о типах элементов и т.д. В файле карты.

Ответ 7

Вы можете попробовать этот трюк:

  • Создайте пустой файл

    % touch empty

  • Получить для версии A

    % cleartool diff -ser empty [email protected]@/main/28 > A

  • Получить для версии B

    % cleartool diff -ser empty [email protected]@/main/29 > B

  • Дифф и прибыль!

    % your-diff-here A B

Поместите его в script и сделайте параметры немного более гибкими и у вас есть.

Если вы хотите, вы можете легко отрезать cleartool diff с небольшим количеством awk или cut или perl или ядом выбора.

Ура для ClearCase!

Ответ 8

Я установил "WinMerge" (бесплатный инструмент diff), и он установил себя как инструмент для очистки четкости. Я не уверен, как это произошло.

Ответ 9

WinMerge, как уже упоминалось, автоматически обнаруживает установку ClearCase и изменяет файл карты в пути установки Clearcase.

У меня возникли проблемы, так как ClearCase откроет свой собственный инструмент сравнения, потому что установка WinMerge не изменила всех необходимых позиций. Поэтому неплохо прочитать документацию для ClearCase, чтобы вы могли ее исправить вручную, если это необходимо.

Ответ 10

Мне это хорошо работает:

%vimdiff my_file.c [email protected]@/main/LATEST

Ответ 11

Я обычно так делаю.

Для унифицированного diff cleartool diff -pred <my file>

Для графического различия cleartool diff -pred -g <my file>