Git. Система контроля версий
В этом видеоуроке мы научимся мержить (мержить, merge - осуществлять слияние) ветки в Git.
На текущий момент у нас есть две ветки (master и new_f) в которых имеются различные модификации кода.
Наша цель - перенести изменения из ветки new_f в ветку master. То есть слить их, смержить.
Для этого нам надо находиться в ветке new_f. Так как это побочная ветка и проще сначала получить в нее изменения из master, протестировать и затем залить в master. Тем самым мы не затронем главную ветку и все конфликты решим в ветке new_f. А ветка master получит изменения быстро и без конфликтов (помним что это главная ветка проекта и с ней могут работать другие разработчики, по этому конфликтные ситуации лучше свести к минимуму).
Переходим в ветку new_f
git checkout new_f
В данной ситуации мы знаем заранее что нас ждет конфликт при слиянии. И сейчас мы позаботимся о том чтобы разрешить конфликт наиболее простым способом и после этого начнем мержить.
Укажем Git-у с помощью какой утилиты будем осуществлять слияние веток и разрешение конфликтов:
git config --global merge.tool kdiff3
Утилита kdiff3. Тем кто проходил мой курс по Mercurial Hg эта утилита будет знакома.
Далее с помощью команды merge запускаем операцию слияния веток:
git merge master
После команды merge указываем с какой веткой надо осуществить слияние.
После запуска мы видим что у нас имеет место конфликт изменений (как вы помните из прошлого видео - мы и в ветке new_f и в ветке master модифицировали один и тот же файл и изменения были на одной и той же строке. По этому kdiff не может принять автоматическое решение какая модификация верная и предоставляет это сделать нам).
Скажем Гит-у запустить утилиту для мержа которая у нас прописана в конфиге.
git mergetool
Если у вас в системе не был установлен kdiff3, либо он установлен но не прописаны системные переменные, то мы получим ошибку:
Установим kdiff3 - http://kdiff3.sourceforge.net/
Процесс установки не сложен, по этому текстом описывать не буду - смотрим в видео.
После успешной установки kdiff3 выполним команду:
git config --global mergetool.kdiff3cmd '"D:\\Program Files\\KDiff3\\kdiff3" $BASE $LOCAL $REMOTE -o $MERGED'
Посмотрим что у нас попало в файл настроек:
После того как мы настроили утилиту для слияния kdiff3, можно приступать к самому слиянию веток в Git.
Выполняем команду:
git mergetool
После выполнения команды у нас запускается kdiff3 в котором мы можем разрешить конфликт и сохранить те изменения которые нам необходимы.
Главное окно kdiff имеет 4 окна с вариантами кода. Смотрим слева на право и с верху в низ.
Первое окно - общий предок конфликтного файла (что было до того как появились первые изменения). В данном случае index.php
Второе окно - изменения которые у нас находятся в локальной ветке. В нашим случае ветка new_f.
Третье окно - изменения в ветке которую мы принимаем. В нашем случае это ветка master.
Четвертое окно - результирующий файл - что мы получим в результате слияния.
Далее и более подробно смотрим в видео.