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