У меня есть пара библиотек, которые созданы для Linux и Windows. Версия для Linux строится через Makefile
в корневом каталоге, а версия для Windows - это проект Visual Studio 2010, в котором используются те же исходные файлы. Код, зависящий от платформы, обрабатывается в файле заголовка уровня аппаратной абстракции (.h
), который обрабатывает такие вещи, как strtok_s()
по сравнению с strtok_r()
, ограничения Visual Studio C89 и т. Д.
Чтобы уменьшить головную боль, которую мои разработчики испытывают при работе с SVN, я запустил пакетный скрипт в Linux, чтобы преобразовать окончания строк для всех исходных файлов .c
, .h
и .cpp
в Linux (LF
), установите свойство svn для концы строк на "родные" (то есть: svn propset eol-style:native
) и зафиксировали все файлы за одну большую фиксацию.
На стороне Linux проблем нет, но всякий раз, когда пользователи Windows проверяют файл (они используют TortoiseSVN), вносят изменения и генерируют diff / patch, TortoiseSVN жалуется на несогласованные окончания строк. Я проверил с помощью GVim в Windows, и кажется, что все файлы имеют окончания строк в стиле UNIX (LF
), но части файла, которые были изменены в Visual Studio, имеют окончания строк в стиле Windows (CR/LF
).
В Visual Studio я уже вручную сохранил файлы как «Окончание строки Unix» через диалоговое окно «Расширенные параметры сохранения», но этот параметр не сохраняется после фиксации SVN, что заставляет меня подозревать, что нет фактических параметров файла сохраняются в файле проекта Visual Studio (.vcproj
) или в файле решения (.sln
), но кодировка самого исходного файла просто изменяется и не сохраняется на нашем сервере SVN.
Как я могу просто установить и забыть концы строк для подобных кроссплатформенных проектов или заставить Visual Studio перестать портить файлы? Насколько я понимаю, установка стиля EOL на собственный означает, что клиенты извлекают файлы в собственной кодировке системы, и они хранятся в «предпочтительном» формате на сервере SVN, поэтому мне не придется иметь дело с этой проблемой. .
Спасибо.
eol-style:native
должно хватить. Ваши комментарии указывают на проблему с вашим клиентом Tortoise (проверьте известные проблемы, связанные с вашей версией, но я сомневаюсь, что это так), который должен преобразовать всеLF
s вCRLF
s. Но VStudio (я использую старый 2k10) не связывается с eol s. Он сохраняет исходный файл eol (а для того, у которого естьLF
, он сохраняет его таким же образом - даже при копировании / вставкеCRLF
конечных строк). Я думаю, что в одном из ваших файлов есть eol промах. Просто удалите && повторно добавьте один файл из поля Ux (убедившись, что есть толькоLF
s) и посмотрите, не работает ли он по-прежнему в Win. - person CristiFati   schedule 10.09.2015