Выполнить слияние двух веток можно следующей командой:
cleartool findmerge . -fversion <version/label> -co -nc -merge -gmerge
Эта команда выполнит слияние с ветки
version
или label
на текущую ветку для всех файлов, содержащих изменения. Ключ -gmerge
удобно использовать при работе в графической среде — при возникновении конфликтов cleartool запустит визуальный инструмент для разрешения конфликтов вручную. Но при работе, например, по SSH, указывать этот ключ смысла не имеет; в этом случае используется консольный инструмент разрешения конфликтов. Тем, кто пользуется консольным, можно только посочувствовать.Пример. У меня в текущей папке есть файлы file1, file2 и file3. На ветке
/main/mybranch1
выполнены изменения для файлов file1 и file3. Чтобы слить изменения с ветки /main/mybranch1
на текущую ветку, мне необходимо выполнить команду:
cleartool findmerge . -fversion /main/mybranch1/LATEST -co -nc -merge -gmerge
В результате выполнения файлы file1 и file3 будут вычекнуты (checkout) на текущую ветку и модифицированы в соответствии с изменениями на ветке
/main/mybranch1
. Мне останется лишь выполнить checkin для измененных файлов. Файл file2 останется нетронутым.Но вот, предположим, что на ветке
/main/mybranch1
добавлен еще один файл — file4. Выполнение findmerge
никак не коснется этого файла, потому что на текущей ветке этого файла нет. Значит, нужно сначала сделать merge для директории.Описание команды
merge
говорит о том, что слияние директорий происходит в три шага:- убедиться, что на "той" ветке нет вычекнутых элементов;
- вычекнуть директорию в текущей ветке;
- выполнить команду
cleartool merge
для директории.
Только после этого можно будет безболезненно выполнить
cleartool findmerge
.Итак, синхронизируем текщую директорию с веткой
/main/mybranch1
:
ct co -nc .
ct merge -to ./ ./@@/main/mybranch1/LATEST
Added file file4 to ./.
Теперь можно зачекать измененную директорию (а можно сделать это потом). И наконец-то можно выполнить долгожданный
findmerge
:
cleartool findmerge . -fversion /main/mybranch1/LATEST -co -nc -merge -gmerge
Будет выполнено слияние для файлов file1, file3 и file4. Теперь нужно внести в репозиторий результаты слияния веток. Заносим всё сразу — зачем мелочиться? :)
ct ci -c "Merged from /main/mybranch1." `ct lsco -r -cview -short`
Ух. Кажется, несложно. Но когда у нас нужно синхронизировать не одну директорию, а, скажем, десяток? Все эти действия превращаются в пытку :( К счастью, действия, необходимые для синхронизации директорий, довольно легко автоматизировать каким-нибудь простеньким скриптом. Что я и сделаю на досуге :)
Комментариев нет:
Отправить комментарий