Так как мы переключились на VS2010, мы заметили новый .filters файл, который, по-видимому, содержит структуру фильтра проекта. Мы также используем подверсию в качестве нашего управления исходным кодом.
К сожалению, каждый раз, когда мы регистрируемся теперь, мы заканчиваем с конфликтами слияния, если кто-либо добавил файл или фильтр к проекту. SVN кажется абсолютно неспособным к слиянию этого типа файла правильно даже при том, что это - базирующийся текст. Это становится довольно печальным.
Кто-либо еще имеет дело с этой проблемой? Кто-либо нашел решение?
Конфликт в качестве примера, кодер добавляет whatever.txt и регистрируется, кодер 'b' добавляет фильтр и новый .cpp файл и обновления. Получает это:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="filter_1">
<UniqueIdentifier>{065f6d5d-81b2-4c98-b313-dceb16c24bf2}</UniqueIdentifier>
</Filter>
<Filter Include="filter_2">
<UniqueIdentifier>{85ef5151-d045-4b20-b1bf-e65d380a3cf3}</UniqueIdentifier>
</Filter>
<Filter Include="filter_2\sub_filter_1">
<UniqueIdentifier>{90efdbe3-b53a-41fc-9dfb-147df5e7d7f3}</UniqueIdentifier>
</Filter>
<Filter Include="NewFilter1">
<UniqueIdentifier>{8162b584-12a0-4a05-8cc5-ede4ced07ba3}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="filter_2\file_3.hpp">
<Filter>filter_2</Filter>
</ClInclude>
<ClInclude Include="filter_2\sub_filter_1\file_4.hpp">
<Filter>filter_2\sub_filter_1</Filter>
</ClInclude>
<ClInclude Include="filter_1\file_1.hpp">
<Filter>filter_1</Filter>
</ClInclude>
<ClInclude Include="filter_1\file_2.hpp">
<Filter>filter_1</Filter>
</ClInclude>
</ItemGroup>
<<<<<<< .mine
<ItemGroup>
<ClCompile Include="whatnot.cpp">
<Filter>NewFilter1</Filter>
</ClCompile>
</ItemGroup>
=======
<ItemGroup>
<None Include="whatever.txt" />
</ItemGroup>
>>>>>>> .r12513
</Project>
Это обычные XML-файлы, такие как файлы других проектов Visual Studio - я не понимаю, почему они должны быть более восприимчивыми к конфликтам, чем другие файлы проекта.
Может быть, эти файлы обрабатываются как двоичные, а не как текстовые? Слияние двоичных файлов не сработает - проверьте свойства svn, чтобы узнать, какой у них mime-тип (если mime-тип не установлен, все будет в порядке). Если установлен mime-тип, возможно, вы имеете дело с неправильно настроенным автоматическим свойством .
Наконец, возможно, люди постоянно добавляют + удаляют файлы - в таком случае вам просто нужно чаще фиксировать и обновлять, пока проект немного не успокоится.
Вам определенно не следует svn: игнорировать
эти файлы.
Если файл «.filters» является чем-то особенным для конфигурации пользователя, то он, вероятно, вообще не принадлежит Subversion. Вы можете заставить Subversion игнорировать изменения в файле, используя свойство svn: ignore:
svn propset svn:ignore '.filters' .
Приведенная выше команда заставит Subversion начать игнорировать изменения в файле с именем ".filters".
Другой вариант - заставить Subversion обрабатывать файл «.filters» как двоичный файл:
svn propset svn:mime-type 'application/octet-stream' .filters
Приведенная выше команда заставит файл «.filters» рассматриваться как двоичный файл и не будет объединен.
Редактировать
Теперь, когда вы объяснили, что файл ".filters" важен для проекта, а также что проблема может заключаться в том, что он обрабатывается как двоичный, а не как обычный текст, решение состоит в том, чтобы установить тип в открытый текст:
svn propset svn:mime-type 'text/plain' .filters