Глава 11 Конфигурационное управление с применением ClearCase Merging Глава 11 1 Цели Изучив эту главу, вы сможете: • Понимать, как в ClearCase работает алгоритм слияния • Сливать файловые элементы • Выполнять специальные типы слияний • Использовать Merge Manager для автоматизированного слияния Глава 11 2 Слияние - обзор • Изменения, производимые над элементами, легко распространяются от ветви к ветви. • ClearCase обеспечивает богатый набор возможностей, чтобы сделать процесс слияния более автоматизированным. • Если слияние выполнено, разработка может продолжаться вдоль ветви • Отсутствуют какие-либо ограничения для возможных слияний, как по частоте, так и по направлениям Глава 11 3 Алгебра слияния base contrib 1 A A B B C contrib 2 merge result A A n/c B B deleted C C C n/c D D Z changed Z changed E Q changed R changed ? conflict X inserted X inserted deleted Глава 11 4 Определение базовой участника (Base Contributor) •Если все участники – версии одного и того же элемента, то ClearCase определяет ближайшего базового участника для = contributor versions сравнения и позволяет = base автоматическое слияние foo.c foo.c bar.c • Если все участники – не версии одного и того же =? элемента, то базовый участники не определяется. Автоматическое слияние невозможно. Вам предлагается ручное слияние файлов 11-5 Глава 11 5 Возможности слияния • Графические средства позволяют c использовать как опции из меню так и «мышь» • Командная строка поддерживает различные опции слияния • Можно сливать до 32 участников • Утилита Merge Manager просматривает определенную пользователем последовательность версий и сообщает какие слияния требуется произвести Глава 11 6 Возможности слияния (продолжение) • Диалоговое окно позволяет Вам: Просматривать содержимое базового файла и файлов-участников слияния Просматривать и редактировать результаты слияния Определять, когда ClearCase запросит вмешательства пользователья (Navigate в контекстном меню) Перезапускать процесс слияния (при выходе из контекстного меню выберите Restart Merge). • Процесс слияния не завершается и не записывается полностью, пока Вы не выйдете из окна слияния Глава 11 7 Пример слияния: • В этом примере: База - Hello.txt@@\main\2. Участники - Hello.txt@@\main\3 и Hello.txt@@\CHECKEDOUT Глава 11 8 Начало слияния Глава 11 9 Проверка результатов слияния • После выполнения Diff Merge проверьте результаты слияния через Version Tree Browser и выполните check in по окончании Глава 11 10 Подтверждение слияния Глава 11 11 Результат слияния • Необходимо принятие, удаление или редактирование строк слияния Глава 11 12 Результаты слияния • В результате слияния ClearCase: Переименовывает существующий файл в file.contrib Размещает результаты слияния в checked-out версию файла Записывает слияние в базу данных VOB с гиперссылкой Глава 11 13 Слияние Unreserved Checkout • Если имеются наследственные версии, то над Unreserved Checkout нельзя сделать операцию checkin. В окне checkin отобразится: • Unreserved Checkout должны быть слиты с LATEST до того, как над ним быдет произведена операция checkin. Глава 11 14 Слияние Unreserved Checkout (продолжение) • Утилита Diff Merge сливает версии, остающегося unreserved файла, над которыми должна быть совершена операция checkin Глава 11 15 Слияние директорий – обзор • Каждая версия директории содержит файловые элементы, элементы-директории, символические связи VOB. • Слияние директории может использовать 2 или более версии одной и той же директории. Результат слияния – новая версия директории, отражающая содержание всех участников слияния. • Слияние директории не может обрабатывать 2 различные директории-элемента (т.е. src и include не могут быть слиты). • При слиянии директорий не остается .contribдиректории. Глава 11 16 Слияние директорий – примеры. • Перед слиянием 2 ветви src директории имеют различное содержание. I:dcrowe_hw\cleartool ls src Src@@\main\LATEST Src@@\main\LATEST\date.c@@ Src@@\main\LATEST\hello.c@@ Src@@\main\LATEST\hello.h@@ Src@@\main\LATEST\Makefile@@ Src@@\main\LATEST\sys.c@@ Src@@\main\LATEST\util.c@@ J:dcrowe_hw\cleartool ls src Src@@\main\LATEST Src@@\main\LATEST\clock.c@@ Src@@\main\LATEST\ date.c@@ Src@@\main\LATEST\hello.c@@ Src@@\main\LATEST\time.c@@ Src@@\main\LATEST\util.c@@ Глава 11 \main Contents of \scr@@\main\LATEST date.c hello.c hello.h Makefile sys.c util.c \enhance Contents of scr@@ \main\enhance\LATEST clock.c date.c hello.c time.c util.c 17 Слияние директорий (продолжение) • Чтобы выполнить слияние директории надо: Удостовериться, что Config spec выбирает нужную версию. Убедитесь, что все участвующие версии в состоянии checked in Извлечь результирующую версию директории. Начинайте слияние незамедлительно, без каких-либо изменений проверенных версий. Пример: В этом примере последняя версия «улучшенной» ветви будет слита с основной ветвью. Check in src@@\main\enhance\LATEST Формирование View по умолчанию: Element * checkout Element * \main\LATEST Check out src@@\main\enhance\LATEST Глава 11 18 Слияние директорий (продолжение) • В окне Diff Merge, выберите изменения для директории слияния Глава 11 19 Слияние директорий (продолжение) •Содержание директории может быть просмотрено через Windows Explorer или Cleartool ls. I: \dcrowe_hw > Cleartool ls src src@@\main\enhance\LATEST src@@\main\enhance\LATEST\clock.c@@ src@@\main\enhance\LATEST\date.c@@ src@@\main\enhance\LATEST\hello.c@@ src@@\main\enhance\LATEST\Makefile.c@@ \main src@@\main\enhance\LATEST\sys.c@@ Contents of src@@\main\enhance\LATEST\time.c@@ \scr@@ \main\LATEST src@@\main\enhance\LATEST\util.c@@ clock.c date.c hello.c Makefile sys.c time.c util.c Глава 11 \enhance 20 Merge Manager– обзор •Когда требуется большое число исходных файлов для частого ветвления и слияния, Manager слияния требует много ручной работы, несвязанной с параллельной разработкой. • Manager слияния обеспечивает графический интерфейс, для определения файла, который будет слит и представления слияния. Глава 11 21 Использование Merge Manager • Выберите View, который Вы хотите слить. Это может быть как Динамический, так и Snapshot View. Глава 11 22 Использование Manager слияния (продолжение) Выберите особые элементы, которые Вы хотели бы слить Глава 11 23 Использование Manager слияния (продолжение) Выберите метод выбора версии каждого элемента для слияния Глава 11 24 Использование Manager слияния (продолжение) Укажите дополнительную информацию Глава 11 25 Использование FindWizard Кликнете на Find, когда сформируете свой выбор критериев слияния. Глава 11 26 Слияние с помощью CLI • Команда Cleartool merge поддерживает задание опций слияния в командной строке. • Выполнение слияния из командной строки: Команда Cleartool merge поддерживает богатый набор опций для выполнения слияния из командной строки Сделайте Checkout для результирующей версии Выполните слияние Пример: I:\dcrowe_hr\src>cleartool cats Element * CHECKOUT Element * \main\LATEST I:\dcrowe_hr\src>cleartool checkout –nc util.c I:\dcrowe_hr\src>cleartool marge –to util.c –qall –version \main\qa\LATEST Глава 11 27 Слияние с помощью CLI • Команда –out в Cleartool merge используется для слияния 2-х версионных файлов во Viewprivate файл. Пример: Слияние последней версии на ветви bugfix с версией в Вашем View. Результат кладется во View-private файл, называющийся mrgtst.c: I:\dcrowe_hr\src>cleartool marge out mrgtst.c util.c util.c@@\main\rel2_ bugfix \LATEST ****************************************************************** <<< file 1: I:\dcrowe_hr\src\util.c@@\main\1 >>> file 2: util.c >>> file 1: util.c@@\main\rel2_ bugfix \LATEST ------[after 15 file]----------|----------------[inserted 16-17 file 2]------… Output of marge in is “mrgtat.c”. Глава 11 28 Контроль результатов слияния. • Всегда полезно проверять результат слияния перед операцией checkin I: \dcrowe_hw\src > clearmake hello.exe I: \dcrowe_hw\src > hello Hello, dcrowe! Your home directory is ‘default’ in the standard area. It is now Thu Feb 25 11:12:03 1999. I: \dcrowe_hw\src > cleartool checkin util.c Глава 11 29 Просмотр результата слияния • В версионном окне Properties/ Custom отображается информация о гиперссылке слияния Глава 11 30 Selective Merge \main \branch 4 0 5 1 6 2 7 3 8 4 9 5 • Обычно merge использует совокупную последовательность изменений • С помощью опции –insert, можно явно указать версию из ветви для слияния • Для этого типа merge стрелки слияния не создаются, в отличие от обычного типа слияния. 6 Глава 11 31 Subtractive Merge \main 4 5 6 7 8 •Разностное слияние удаляет из checkedout версии изменения, сделанные в одной или более ее предшественниц. •Используйте –delete для пометки версии или нескольких версий для вычитания. Пример: I: \dcrowe_hw\src > cleartool checkout hello.c I: \dcrowe_hw\src > cleartool merge to hello.c – delete –version \main\branch\5 \ main\branch\7 9 Глава 11 32 Аннотированные отчеты – обзор • Показывает содержание версии и аннотирует каждую строку с указанием в какой версии строка была добавлена • Только text_files или compressed_text_files могут быть аннотированы. • Вывод по умолчанию во View-Private файл: filename.ann. • Если генерация происходит с помощью Cleartool annotate, то вывод может быть сформатирован несколькими путями с использованием опции –fmt. Глава 11 33 Аннотированные сообщения – пример • По умолчанию, выходная строка команды Cleartool annotate включает только текстовые строки • Чтобы изменить формат, заданный по умолчанию: Используйте опцию –rm, чтобы включить строки, перенесенные в одну или несколько верси по нисходящей ветви. Используйте опцию –all, чтобы включить строки из всех версий, кроме тех, которые расположены по нисходящей ветви. I:\dcrowe_hw\src > cleartool annotate hello.c Annotated result written to “hello.c.ann” Глава 11 34 Формат отчета Глава 11 35 Контрольные вопросы • Как в ClearCase осуществляется ручное слияние? • Что такое базовый участник слияния? • Какая процедура GUI используется для осуществления слияния нескольких файлов одновременно? • Что такое subtractive merge и selective merge? Глава 11 36