В ClearCase, как я могу просмотреть старую версию файла в статическом представлении из командной строки?
-
05-07-2019 - |
Вопрос
Как я могу просмотреть старую версию файла в статическом представлении?
Дан пустой файл (вызывается empty
в этом примере) Я могу подорвать diff
, чтобы показать мне старую версию:
% cleartool diff -ser empty File@@/main/28
Это похоже на довольно уродливый взлом.Я пропустил более простую команду?Есть ли более аккуратный способ сделать это?
(Я не хочу редактировать спецификацию конфигурации - это довольно утомительно, и я пытаюсь просмотреть кучу старых версий.)
Разъяснение:Я хочу отправить версию файла в стандартный вывод, чтобы я мог использовать его с остальной частью Unix (grep, sed и так далее).) Если вы нашли этот вопрос, потому что ищете способ сохранить версию элемента в файл, см. Ответ Брайана.
Решение
Я пытаюсь просмотреть кучу старых версий
Я не уверен, что вы говорите о "куче старых версий" один файл, "куча старых версий" из несколько Файлы.
Чтобы визуализировать несколько старых версий одного файла, проще всего отобразить дерево его версий (ct lsvtree -graph File
), а затем выберите версию, щелкните по ней правой кнопкой мыши и 'Send To
' редактор, который принимает несколько файлов (например, Notepad ++).В несколько кликов вы получите доступ к этим старым версиям.
Примечание:у вас должен быть CC6.0 или 7.0.1 IFix01 (7.0.0 и 7.0.1 не удается "отправить" файл со следующим сообщением об ошибке "Access to unnamed file was denied
")
Но для визуализации нескольких старых версий разных файлов я бы порекомендовал динамический просмотр и редактирование спецификации конфигурации этого представления (а не представления моментального снимка, с которым вы сейчас работаете), чтобы быстро выбрать все эти старые файлы (надеюсь, с помощью простого правила выбора, например 'element * aLabel
')
[Из комментариев:]
каков идиоматический способ "cat" более ранней версии файла?
Идиоматический способ заключается в динамичный представление (которое вы настраиваете с точно такой же спецификацией конфигурации, что и существующее представление моментального снимка).
Затем вы можете просмотреть (как в разделе "изменить каталог на") различные расширенные пути из файла.
Если вы хотите просмотреть все версии ветви файла, вы заходите в:
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
" команда (справочная страница) упомянутый ниже Автор: Брайан не делайте стандартный вывод:
Команда 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
Другие советы
Я знаю, что это старая тема ... но я не мог допустить, чтобы этот порыв прошел неразрешенным ....
Статические представления имеют " ct get " команда, которая делает именно то, что вы ищете.
cleartool get -to ~/foo File@@/main/28
сохранит эту версию файла в ~ / foo
.
[Переписано на основе первого комментария]
Все файлы в Clearcase, включая версии, доступны в структуре виртуального каталога. Я не очень знаком со статическими представлениями, но я верю, что они все еще проходят виртуальный фс; они просто обновляются по-разному.
В этом случае вы можете просто сделать:
cat File@@/main/28
Это может стать уродливым, если вам также нужно будет найти правильную версию каталога, содержащего этот элемент файла. У нас есть сценарий PERL, который использует этот подход для анализа исторических изменений, внесенных в файлы, и мы быстро исчерпали пространство командной строки в Windows для фактического выполнения команд!
Если File является элементом Clearcase, и cat File
работает, и представление настроено правильно, попробуйте:
cat File@@/main/28
(примечание: без ct shell
- вам это не нужно, если вы уже находитесь в представлении.)
Попробуйте набрать:
ct ls -l File
Если в нем показан файл с расширенным именем, аналогичным указанному выше, то вы сможете отслеживать файл с использованием расширенного имени.
ct shell cat File @@ version