Как упоминалось в Bliki Мартина Фаулера, у FeatureBranch может быть проблема с семантическими конфликтами сильный>.
![alt text](https://martinfowler.com/bliki/images/featureBranch/simple2.png)
Проблема, о которой я больше всего беспокоюсь, - это семантический конфликт.
Простым примером этого является то, что если профессор Плам изменяет имя метода, который вызывает код преподобного Грина.
Инструменты рефакторинга позволяют безопасно переименовать метод, но только на основе вашего кода. Итак, если G1-6 содержит новый код, вызывающий foo, профессор Плам не может сказать об этом в своей кодовой базе, поскольку у него его нет. Вы узнаете только о большом слиянии.
Переименование функции - относительно очевидный случай семантического конфликта. На практике они могут быть гораздо более тонкими. Тесты являются ключом к их обнаружению, но чем больше кода для слияния, тем больше вероятность возникновения конфликтов и тем сложнее их исправить.
Это риск конфликтов, особенно семантических конфликтов, которые страшно делать большие слияния.
См. Пример семантических конфликтов в этом вопросе SO.
Как только это будет принято во внимание, вам также необходимо различать CVCS и DVCS (централизованный или распределенный VCS), поскольку DVCS привносит ортогональное измерение в ветвление: "публикация" (push / pull в / из удаленных репозиториев, что означает, что вы можете работать с «той же» веткой, оставаясь в полной изоляции, потому что вы работаете в локальном клонированном репозитории).
CVCS, такие как SVN, имеют свои собственные проблемы с слияние ветвей, в котором DVCS должна быть очень хороша.
См. Также «Когда следует разветвляться?»
person
VonC
schedule
12.07.2010