Ответ 1
Важно понять модель, используемую движком слияния Subversion. Он сильно отличается от Git.
Subversion поддерживает два основных типа слияний. Первый - это слияние "sync", которое выполняется, чтобы поддерживать ветвь разработки (функция/задача/тема) в актуальном состоянии с помощью соединительной линии. Второй - это "реинтеграция" слияния, которое используется для продвижения готовой работы к стволу. Таким образом, модель является моделью магистрали (магистрали), которая поддерживает ветки функций и ветки выпуска.
Важным ограничением является то, что Subversion не рассматривает полную DAG при поиске истории слияния, чтобы найти правильную базу слияния. Слияние между непосредственно связанными (родительско-дочерними) ветвями хорошо поддерживается, но слияния между ветвями, отдаленными предками или братьями и сестрами, с косвенным вкладом из других отраслей, часто дают неожиданные результаты.
Поддержка слияния Subversion со временем улучшается, как вы заметили. Он не имел никакого отслеживания слияния вообще до 1,5, совершил огромные скачки в 1,8, а предстоящие версии 1.9 улучшат отслеживание переименования/перемещения. Там также говорят о "локальных полках" в будущем.
(Кстати, я знаю кое-что из этого, потому что я присутствовал на конференции Subversion/ Git Live на прошлой неделе, и коммиттер, который работает над движком слияния, дал презентацию.)
Git, с другой стороны, имеет очень уважаемый механизм слияния. Он может обрабатывать слияния практически любой сложности. На самом деле его единственным основным ограничением слияния является то, что он выводит move/renames после факта. В очень сложных ситуациях рефакторинга он может не подобрать все правильно.
Подводя итог:
- Оба Subversion и Git будут хорошо работать в общих сценариях слияния.
- Git будет обрабатывать более сложные сценарии слияния более эффективно, особенно при слиянии ветвей, у которых нет прямого отношения родитель-потомок.
- Обе системы имеют проблемы с отслеживанием переименований/перемещений во время рефакторинга, хотя Git, вероятно, делает лучшую работу в типичных случаях.
- Git Команда merge проще запускать в простых случаях. Обе системы могут иметь крутую кривую обучения, если вы делаете необычные операции.
- Git поддерживает связанные операции, такие как перезагрузка и слияние репозиториев, которые могут улучшить ваш рабочий процесс в некоторых случаях.
- Чтобы наилучшим образом использовать Subversion, убедитесь, что у вас есть сервер и клиенты с более высокой вероятностью.
Надеюсь, что это поможет!