В ClearCase, как я могу просмотреть старую версию файла в статическом представлении из командной строки? - PullRequest
16 голосов
/ 07 октября 2008

В статическом режиме, как я могу просмотреть старую версию файла?

Учитывая пустой файл (в данном примере называемый empty), я могу подменить diff, чтобы показать мне старую версию:

    % cleartool diff -ser empty File@@/main/28

Это похоже на уродливый хак. Я пропустил более простую команду? Есть ли более аккуратный способ сделать это?

(Я не хочу редактировать спецификацию конфигурации - это довольно утомительно, и я пытаюсь взглянуть на кучу старых версий.)

Уточнение : Я хочу отправить версию файла на стандартный вывод, чтобы я мог использовать ее с остальной частью Unix (grep, sed и т. Д.). Ищете способ сохранить версию элемента в файл, см. ответ Брайана .

Ответы [ 5 ]

14 голосов
/ 07 октября 2008

Я пытаюсь посмотреть на кучу старых версий

Я не уверен, что вы говорите о "куче старых версий" одного файла , "куче старых версий" из нескольких файлов.

Чтобы визуализировать несколько старых версий одного файла, самое простое средство - показать его дерево версий (ct lsvtree -graph File), а затем выбрать версию, щелкнуть по ней правой кнопкой мыши и «Send To» - редактор, который принимает несколько файлов (как Блокнот ++). В несколько кликов вы увидите старые версии.
Примечание: у вас должен быть CC6.0 или 7.0.1 IFix01 (7.0.0 и 7.0.1 не могут «отправить» в файл со следующим сообщением об ошибке «Access to unnamed file was denied»)

Но для визуализации нескольких старых версий различных файлов я бы порекомендовал динамическое представление и редактирование спецификации конфигурации этого представления (а не представления моментального снимка, с которым вы сейчас работаете), чтобы быстро выбрать все эти старые файлы ( надеюсь через простое правило выбора типа 'element * aLabel')


[Из комментариев:]

каков идиоматический способ "кошки" более ранней ревизии файла?

Идиоматический путь - через динамическое представление (которое вы конфигурируете с точно такой же спецификацией конфигурации, как у существующего представления снимка).

Затем вы можете просмотреть (как в 'change directory to') различные расширенные пути файла.

Если вы хотите отследить все версии ветки файла, введите:

cd /view/MyView/vobs/myVobs/myPath/myFile@@/main/[...]/maBranch
cat 1
cat 2
...
cat x

'1', '2', ... 'x' - версия 1, 2, ... x вашего файла в этой ветви.


Для представления снимка расширенный путь недоступен , поэтому ваш "хак" - это путь.

Однако, 2 замечания здесь:

  • , чтобы быстро отобразить все предыдущие версии файла снимка в данной ветке, вы можете набрать:

(однострочная версия для копирования-вставки, синтаксис Unix:)

cleartool find addon.xml -ver 'brtype(aBranch) && !version(.../aBranch/LATEST) && ! version(.../aBranch/0)' -exec 'cleartool diff -ser empty "$CLEARCASE_XPN"'

(многострочная версия для удобства чтения:)

cleartool find addon.xml -ver 'brtype(aBranch) && 
                               !version(.../aBranch/LATEST) && 
                               ! version(.../aBranch/0)' 
          -exec 'cleartool diff -ser empty "$CLEARCASE_XPN"'
  • вы можете быстро получить более приятный вывод с

(однострочная версия для копирования-вставки, синтаксис Unix:)

cleartool find addon.xml -ver 'brtype(aBranch) && !version(.../aBranch/LATEST) && ! version(.../aBranch/0)' -exec 'cleartool diff -ser empty "$CLEARCASE_XPN"' | ccperl -nle '$a=$_; $b = $a; $b =~ s/^>+\s(?:file\s+\d+:\s+)?//g;print $b if $a =~/^>/'

(многострочная версия для удобства чтения:)

cleartool find addon.xml -ver 'brtype(aBranch) && 
                               !version(.../aBranch/LATEST) && 
                               ! version(.../aBranch/0)' 
         -exec 'cleartool diff -ser empty "$CLEARCASE_XPN"'
| ccperl -nle '$a=$_; $b = $a; 
               $b =~ s/^>+\s(?:file\s+\d+:\s+)?//g;
               print $b if $a =~/^>/'

Таким образом, вывод будет лучше.


Команда "cleartool get" (man-страница) , упомянутая ниже by Brian not do stdout:

Команда get копирует только элементы файла в представление.

В системе UNIX или Linux скопируйте /dev/hello_world/foo.c@@/main/2 в текущий каталог.

cmd-context get –to foo.c.temp /dev/hello_world/foo.c@@/main/2

В системе Windows скопируйте \dev\hello_world\foo.c@@\main\2 в каталог C:\build.

cmd-context get –to C:\build\foo.c.temp \dev\hello_world\foo.c@@\main\2

Так что, может быть, чем, передав результат в cat (или type в Windows), вы можете сделать что-то с выводом указанной команды cat (type).

cmd-context get –to C:\build\foo.c.temp \dev\hello_world\foo.c@@\main\2 | type C:\build\foo.c.temp 
12 голосов
/ 11 февраля 2011

Я знаю, что это старая тема ... но я не мог допустить, чтобы этот порыв прошел неразрешенным ....

Статические представления имеют команду "ct get", которая делает именно то, что вы ищете.

cleartool get -to ~/foo File@@/main/28

сохранит эту версию файла в ~/foo.

2 голосов
/ 07 октября 2008

[переписано на основе первого комментария]

Все файлы в Clearcase, включая версии, доступны в структуре виртуального каталога. Я не очень знаком со статическими представлениями, но я верю, что они все еще проходят виртуальный фс; они просто обновляются по-разному.

В этом случае вы можете просто сделать:

   cat File@@/main/28

Это может стать уродливым, если вам также нужно будет найти правильную версию каталога, содержащего этот элемент файла. У нас есть сценарий PERL, который использует этот подход для анализа исторических изменений, внесенных в файлы, и мы быстро исчерпали пространство командной строки в Windows для фактического выполнения команд!

1 голос
/ 06 октября 2010

Если File является элементом Clearcase, и cat File работает, и представление установлено правильно, попробуйте:

cat File@@/main/28

(примечание: без ct shell - вам это не нужно, если вы уже находитесь в представлении.)

Попробуйте набрать:

ct ls -l File

Если в нем показан файл с расширенным именем, аналогичным указанному выше, то вы сможете просмотреть файл с использованием расширенного имени.

0 голосов
/ 28 декабря 2009

ct shell cat File @@ version

...