Конфликт при слиянии веток с новыми файлами
От: okman Беларусь https://searchinform.ru/
Дата: 23.03.12 11:20
Оценка:
Доброго дня.

Подскажите, как лучше всего разруливать следующую ситуацию.

Допустим, есть проект, находящийся под контролем системы управления версиями.
Разработчики заводят себе новые ветки для работы над новым функционалом,
затем время от времени синхронизируют свои изменения с центральным репозиторием.
Сам механизм ветвления и слияния в контексте рассматриваемого вопроса не особо важен.
Это может быть как create/reintegrate branch (SVN), так и pull/push (DVCS).

Суть в том, что работа над новым функционалом почти всегда ведет к созданию новых
файлов в этих ветках. И если два или более разработчика создают новые файлы, то
при заливке изменений в центральный репозиторий возникают конфликты в файле проекта.

Например, Visual Studio хранит список файлов проекта в файле .vc(x)proj.
Когда две ветки с новыми файлами вливаются в центральный репозиторий, в этом
списке появляются конфликтные строки, которые приходится нудно (иногда очень нудно)
разрешать вручную всякими diff-тулами.

Вот фрагмент файла проекта (VS2010) в его первоначальном состоянии:
>243    <ItemGroup>
>244    <ClCompile Include="base.h"/>
>245    </ItemGroup>

Разработчик A в своей ветке добавил в проект файл feature-A.h и теперь вносит сделанные
изменения в репозиторий, строка 245:
>243    <ItemGroup>
>244    <ClCompile Include="base.h"/>
>245    <ClCompile Include="feature-A.h"/>
>246    </ItemGroup>

Разработчик B в своей ветке тоже создал новый файл проекта — feature-B.h и тоже
пытается занести изменения в репозиторий, получая при этом конфликт в строке 245:
>243    <ItemGroup>
>244    <ClCompile Include="base.h"/>

>------------ CONFLICT

>245    <ClCompile Include="feature-A.h"/>
>245    <ClCompile Include="feature-B.h"/>

>------------ END CONFLICT

>246    </ItemGroup>

Запрещать добавлять файлы в проект слишком бредово, это ж feature branches, они для того и придуманы.
Запрещать двум и более разработчиками делать ветки от одного проекта еще бредовее.
Исправлять конфликты вручную можно, но это неудобно (когда файлов несколько десятков), а еще этот
процесс подвержен ошибкам. Еще можно извратиться, и сливать изменения, сделанные в ветках, игнорируя
изменения файла проекта, а потом добавить новые файлы вручную, уже находясь в trunk, но это коряво.

Как быть ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.