Ответ 1
Изменение, которое является конфликтом, - это когда два человека сделали изменения в один и тот же файл таким образом, что эти два изменения не могут быть автоматически разрешены.
1) Давайте начнем с примера неконфликтного слияния.
Исходный файл
line1
line2
line3
Лицо A меняет его на это:
line1CHANGED
line2
line3
Лицо B меняет его на следующее:
line1
line2CHANGED
line3
Когда оба проверяются и сливаются, конфликт отсутствует, поскольку он может легко разрешить создание этого финального файла:
line1CHANGED
line2CHANGED
line3
Subversion будет обрабатывать это автоматически как слияние.
2) Теперь пример противоречивых изменений.
Исходный файл
line1
line2
line3
Лицо A меняет его на это:
line1CHANGED_BY_A
line2
line3
Лицо B меняет его на следующее:
line1CHANGED_BY_B
line2
line3
Это невозможно объединить автоматически, так что это конфликт. Вам необходимо будет решить, либо с помощью человека, либо сменить его, либо изменить человека. В этом случае subversion предупреждает вас о конфликтах и требует от вас решения о том, как их разрешать.
3) Наконец, вы можете иметь как конфликтующие, так и неконфликтные изменения в пределах одной и той же ревизии.
Исходный файл
line1
line2
line3
Лицо A меняет его на это:
line1CHANGED_BY_A
line2ALSO_CHANGED_BY_A
line3
Лицо B меняет его на следующее:
line1CHANGED_BY_B
line2
line3ALSO_CHANGED_BY_B
Теперь, в этом примере, оба человека изменили файл, и в строке 1 есть конфликтующее изменение, которое должно быть разрешено, но строки 2 и 3 являются неконфликтными изменениями и могут быть разрешены автоматически.
Вы можете решить эту проблему несколькими способами.
Во-первых, вы можете полностью принять файл A или B и отказаться от другого. Это приведет к тому, что другие лица потеряют противоречивые изменения. Скажем, вы решите полностью разрешить использование A, вашим окончательным файлом будет:
line1CHANGED_BY_A
line2ALSO_CHANGED_BY_A
line3
(Точно, файл и все изменения по B отбрасываются)
Во-вторых, вы можете разрешать только конфликтующие изменения и сохранять все неконфликтные изменения. Это вы выбрали бы либо изменение A или B для первой линии, и все равно получите обе другие изменения линии от обоих людей. Итак, скажем, например, вы решили разрешить конфликты, используя A, ваш конечный файл:
line1CHANGED_BY_A
line2ALSO_CHANGED_BY_A
line3ALSO_CHANGED_BY_B
Альтернативой вы можете использовать такие инструменты, как KDiff, которые поддерживают просмотр каждого конфликта отдельно (поскольку, конечно, вы можете иметь mutliple изменения, как конфликтующие и не конфликтующий, в том же файле), что позволит вам выбирать различные методы разрешения для каждого.
Если у вас возникли проблемы с пониманием слияния с инструментами командной строки, я настоятельно рекомендую вам взглянуть на KDiff (или какой-то другой инструмент слияния/разворота GUI), поскольку они отображают файлы рядом друг с другом (вместе с оригиналом) и позволяют вы должны визуализировать, что будет делать каждое действие разрешения.