Ручной контроль слияния


На первый взгляд объединить изменения просто, однако на практике могут возникнуть трудности. Проблема заключается в том, что при многократном объединении изменений одной ветки с другой можно непреднамеренно сделать объединение одних и тех же изменений дважды. Иногда, когда это случается, проблем это не вызывает. При внесении изменений в файл, как правило Subversion предупреждает о том что файл уже содержит изменения и в этом случае не выполняет никаких действий. Однако если уже присутствующие изменения были модифицированы, то возникнет конфликт.

В идеале, система управления версиями должна предотвращать повторное применение изменений к ветке. Она должна автоматически фиксировать, какие изменения уже были получены и иметь возможность перечислить их вам. Должна использовать эту информацию для того, что бы, на сколько возможно, помочь автоматизировать слияние.

К сожалению, Subversion не такая система. Как и CVS, Subversion пока не сохраняет ни какой информации об операциях объединения. При фиксации локальных изменений хранилище понятия не имеет, являются ли эти изменения результатом выполнения команды svn merge или результатом обычного ручного редактирования файлов.

Что это означает для вас, как пользователя? Это означает, что до того момента, пока у Subversion не появится этой функции, вам придется контролировать слияние информации самостоятельно. Лучшим местом для этого является лог-сообщение. Как было показано в предыдущих примерах, рекомендуется, что бы в лог-сообщении был указан конкретный номер правки (или диапазон правок) которые были слиты в вашу ветку. После этого, для того, что бы просмотреть какие изменения ваша ветка уже содержит, вы можете запустить команду svn log. Это позволит быть аккуратнее при выполнении команды svn merge, что бы не пересечься с уже портированными изменениями.

В следующем разделе мы на примерах рассмотрим эту технику в действии.



Содержание раздела