Начинаем работать с системой контроля версий GIT (для чайников)
(Часть 4.3.13. Конфликты и их разрешение)
1. Устанавливаем Git.
2. Создаем репозиторий Git.
3. Устанавливаем SmartGit для работы с репзиторием.
4. Основы Работа с репозиторием Git.
4.1. Создаем проект для работы с репозиторием.
4.2. Добавляем первый файл в локальный репозиторий.
4.3. Вносим изменение в локальный репозиторий.
4.3.1. Добавляем строки в файл.
4.3.2. Изменяем строки в файле.
4.3.3. Удаляем строки из файла.
4.3.4. Отменяем изменения до загрузки в локальный репозиторий.
4.3.5. Добавляем новые файлы в репозиторий.
4.3.6. Удаляем файл из репозитория.
4.3.7. Просматриваем историю изменений репозитория.
4.3.8. Изменяем комментарий коммита.
4.3.9. Отменяем последний коммит.
4.3.10. Создаем новую ветку.
4.3.10.1. Новая ветка относительно последнего коммита.
4.3.10.2. Новая ветка относительно выбранного коммита.
4.3.11. Удаляем ветку.
4.3.12. Объединяем ветки.
4.3.13. Конфликты и их разрешение.
4.3.14. Добавляем выбранный коммит из одной ветки в другую.
4.3.15. Rebase или как упростить историю коммитов.
4.4. Работа с удаленным репозиторием.
4.4.1. Настраиваем связь между сервером и клиентом по SSH.
4.4.2. Клонируем репозиторий с ЭВМ-сервера на ЭВМ-клиент.
4.4.3. Основы работы с удаленным репозиторием.
5. Заключение.
4.3.13. Конфликты и их разрешение.
Чтобы рассмотреть решение конфликта на примере сделаем два изменения одной и той же строки файла main.c, но одно изменение сделаем в ветке master, а второе в ветке next.
Итак, переключаемся на ветку мастер. Вносим в файл main.c следующие изменения:
#include < stdio.h >
#include < unistd.h >
double t=0.1;
int main (void)
{
int k=0;
printf (“Hello word!!!\n”);
sleep (5);
return k;
}
Добавленная строка выделена синим цветом. Сохраним внесенные в файл изменения и сохраняем их в репозиторий с комментарием «First change for conflict»
Переключаемся на ветку next и вносим в файл main.c следующие изменения:
#include < stdio.h >
#include < unistd.h >
int y=7;
int main (void)
{
printf (“Hello word!!!\n”);
sleep (5);
return 0;
}
Добавленная строка выделена синим цветом. Сохраним внесенные в файл изменения и сохраняем их в репозиторий с комментарием «Second change for conflict»
Переключаемся на ветку master и объединяем ветку master с ветокой next, как это описано в 4.3.12. При объединении веток появится сообщении о конфликте (рисунок 44), так как изменения в ветке master и изменения в ветке next были произведены в одной и той же строке, в одном и том же файле. Система контроля версий не может самостоятельно определить какое изменение важнее и предлагает пользователю самому выбрать как объединить изменения: либо оставить строку из ветки master, либо строку из ветки next, или обе строки. Конфликт необходимо разрешить вручную, для чего жмем “OK”.
В основном окне программы SmartGit во вкладке Changes будет указано место конфликта. Место конфликта выделяется специальными символами (рисунок 45). Место конфликта с изменениями, внесенными в текущей ветке выделяется так:
<<<<<<< HEAD
текст изменения
=======
Место конфликта с изменениями, внесенными в ветке, с которой производится объединение (ветка next) выделяется так:
=======
текст изменения
>>>>>>> ref/heads/Next.
Самый простой способ решения конфликта – открыть файл main.c, и вручную откорректировать изменения так, как Вам требуется, и удалить символы выделения места конфликта. Например, я считаю необходимым оставить и изменения в ветке master и изменения в ветке next, а затем сохранить внесенные изменения в репозиторий.
Вид вкладки Changes после корректировки файла main.c приведен на рисунке 46.
Однако если конфликтов много, то зачастую вручную их разрешить сложно, поэтому в программе SmartGit предусмотрен режим автоматизированного разрешения конфликтов.
Давайте разберемся как это делается на нашем примере. Итак при объединении наших веток master и next возник описанный выше конфликт. Для его разрешения запустим «Conflict Solver», для чего во вкладке Files выбираем файл с конфликтом и в меню Query (рисунок 47) выбираем пункт Conflict Solver. Вид окна «Conflict Solver» для нашего случая приведен на рисунке 48.
В левой колонке окна Conflict Solver приведено состояния файла main.c в ветке master до объединения. В правой колонке приведено состояния файла main.c для ветке next. В центре приведено состояния файла main.c по результатам объединения веток. Среднюю колонку мы и будем править, а именно строки выделенные красным цветом.
Обратите внимание на символы ‘»’ , ‘«’ и ‘x’ на полях между колонками. Нажимая на эти символы мы можем вносить изменения из левой колонке в центральную (‘»’), из правой колонке в центральную (‘«’) или удалять изменения из центральной колонке ‘x’.
Предположим, что вместо конфликта, я хочу оставить только изменения из левой колонке. Для этого я нажимаю символ ‘»’. Результат этого действия приведен на рисунке 49.
В принципе конфликт решен и можно сохранять изменения в репозиторий для чего жмем кнопку «Save» , закрываем окно «Conflict Solver» и в открывшемся окне (рисунок 50) жмем кнопку «Don’t Stage», обновляем основное окно программы SamartGit и сохраняем изменения в репозиторий, как это сделать я уже неоднократно описывал.
<<< Предыдущий раздел Следующий раздел >>>
|