Конфликт в системе контроля версий возникает, когда пользователь пытается отправить изменения, внесённые в локальную версию проекта, но они не согласуются с последним «источником истины» в системе контроля версий.
Причины могут быть самыми разными, но чаще всего конфликт происходит из-за того, что пользователь пытается внести изменения в часть командного проекта, в которую уже были внесены изменения его товарищем по команде. Отправка изменений без их предварительной синхронизации с изменениями других пользователей приводит к конфликту.
Лучший способ избежать конфликтов — включить параметры «Автоматическое извлечение» и «Автоматический откат». Используйте рекомендуемые методы контроля версий, чтобы сократить количество конфликтов в проекте и лучше понять, как работает контроль версий.
Предупреждение о предотвращении конфликтов при использовании параметров «Автоматическое извлечение» и «Автоматический откат»
Unreal Revision Control помогает избежать большинства конфликтов, если параметры «Автоматическое извлечение» и «Автоматический откат» включены по умолчанию при создании проекта с использованием системы контроля версий.
Эти функции позволяют автоматически извлекать ресурсы при внесении в них изменений и автоматически откатывать изменения, если извлечение не удалось. Система выдаёт соответствующее предупреждение, чтобы предотвратить конфликт.
Эти предупреждения появляются преимущественно в двух случаях:
Попытка внести изменения в ресурсы, которые были извлечены товарищем по команде
Если вы попытаетесь внести изменения в ресурс, который был извлечён вашим товарищем по команде, то они автоматически откатятся, чтобы вы не могли изменять ресурсы, над которыми работает ваш товарищ.
В таких случаях вам не нужно совершать никаких действий, потому что конфликта уже удалось избежать. Однако если вам всё же нужно внести изменения в такой ресурс, лучше согласовать это с товарищем по команде. Когда он зафиксирует этот ресурс, синхронизируйтесь с последними изменениями и начните вносить свои правки.
В первый раз вы увидите модальное предупреждение о том, какие из ваших изменений были отменены и кем были извлечены данные. Если вы хотите получать такое предупреждение каждый раз, снимите галочку с параметра «Больше не показывать».
В дальнейшем это уведомление будет появляться во всех подобных случаях.
Попытка внести изменения в ресурсы без синхронизации с последней версией
Если вы попытаетесь внести изменения в ресурс без синхронизации с последней версией, они автоматически откатятся. Это нужно для того, чтобы вы не могли вносить изменения, которые не сможете зафиксировать позже.
В такой ситуации вам нужно просто синхронизироваться с последней версией и после этого вносить изменения.
В первый раз вы увидите модальное предупреждение о том, какие из ваших изменений были отменены. Если вы хотите получать такое предупреждение каждый раз, снимите галочку с параметра «Больше не показывать».
В дальнейшем это уведомление будет появляться во всех подобных случаях.
Сообщения об ошибке из-за конфликта
Конфликты чаще всего возникают тогда, когда параметры «Автоматическое извлечение» и «Автоматический откат» выключены. Конфликты в системе контроля версий Unreal Revision Control могут возникать в следующих случаях:
- не была своевременно выполнена синхронизация с последней версией;
- внесение изменений без предварительного извлечения ресурса;
- работа в автономном режиме.
В следующих разделах рассматриваются ошибки из-за конфликтов и их распространённые причины.
Конфликты из-за отсутствия синхронизации с последней версией
Такой тип конфликтов возникает, когда вы пытаетесь синхронизироваться с последней версией или зафиксировать изменения и внесли изменения в ресурс, который был изменён и зафиксирован кем-то другим в снимке, более новом, чем тот, который вы синхронизировали в последний раз.
Конфликт возникает из-за того, что вы вносите изменения в устаревшую версию ресурса.
В этом случае вы получите сообщение об ошибке, где будет указано, какие ресурсы являются конфликтными и кто вносил в них последние изменения, с которыми вам необходимо синхронизироваться. Чтобы разрешить конфликт, необходимо синхронизироваться с последними изменениями и перезаписать свои данные.
После этого вы сможете извлечь ресурсы, в которые хотите внести изменения, а затем изменить их и зафиксировать изменения.
Конфликты при извлечении ресурсов
Ещё один тип конфликта возникает тогда, когда вы вносите изменения в ресурс, который был извлечён другим пользователем, и пытаетесь синхронизироваться с последней версией или зафиксировать изменения.
Конфликт возникает из-за того, что вы внесли изменения в ресурс, для редактирования которого вы не были наделены правами, поскольку он уже был извлечён вашим товарищем по команде.
В этом случае вы получите сообщение об ошибке, где будет указано, в какие ресурсы вы внесли изменения до их извлечения, а также инструкции по взаимодействию с товарищем по команде для решения проблемы.
Если вы хотите откатить изменения, то можете отменить их для отдельных конфликтных ресурсов с помощью контекстного меню системы контроля версий и повторно выполнить синхронизацию или зафиксировать изменения.
Конфликты при копировании ресурсов
Третий тип конфликта очень редкий, и он возникает тогда, когда два участника команды случайно создают ресурсы с одним именем и путём к файлу и пытаются сохранить и зафиксировать эти ресурсы каждый по отдельности. Первому пользователю, фиксирующему ресурс, удастся это сделать, а второй получит сообщение об ошибке.
Лучшее решение данной проблемы — переименование второго объекта, что также предотвратит его удаление. Также можно изменить местоположение ресурса в иерархии проекта, ведь конфликта не возникнет, если путь к файлу будет другим.
Работа в автономном режиме
Хотя некоторые действия с проектом UEFN можно выполнять в автономном режиме, лучше этого избегать. Работа в автономном режиме сопряжена с риском возникновения конфликтов с работой коллег, ведь ресурсы невозможно извлечь без подключения к Интернету, и может случиться так, что над одним ресурсом будут одновременно работать два пользователя.
При необходимости работы в автономном режиме рекомендуется следующее:
- заранее сообщите своим товарищам по команде, над каким ресурсом вы собираетесь работать, и по возможности извлеките необходимые ресурсы, прежде чем переходить в автономный режим;
- восстановите подключение к Интернету как можно скорее, выполните синхронизацию с последней версией и зафиксируйте все внесённые вами изменения.