SVN - Кроссплатформенные проекты Linux/Windows - Visual Studio всегда портит файлы

У меня есть несколько библиотек, которые созданы для Linux и Windows. Версия для Linux строится через Makefile в корневом каталоге, а версия Windows представляет собой проект Visual Studio 2010, который использует точно такие же исходные файлы. Специфичный для платформы код обрабатывается в заголовке уровня аппаратной абстракции (.h) файл, который обрабатывает такие вещи, как strtok_s() против strtok_r()Ограничения Visual Studio C89 и т. Д.

Чтобы уменьшить головную боль, которую испытывают мои разработчики при работе с SVN, я запустил пакетный скрипт на коробке Linux, чтобы преобразовать окончания строк для всех исходных текстов. .c, .h, а также .cpp файлы в Linux (LF), установите для свойства svn для окончаний строки значение "native" (т.е. 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 на native означала, что клиенты извлекали файлы в собственной кодировке системы, и они сохранялись в "предпочтительном" формате на сервере SVN, поэтому мне не пришлось бы заниматься этими проблемами.,

Спасибо.

1 ответ

Решение

Настройка eol-type собственность на native должно быть то, что вам нужно. Команда для настройки преобразования конца строки svn propset svn:eol-style native yourfile.c, Если вы использовали точный propset Команду, которую вы показываете в своем вопросе, затем используйте синтаксис, который я перечислил, должен решить вашу проблему. Если команда в вашем вопросе была просто опечаткой, вот несколько вещей, которые нужно попробовать, если у вас все еще есть проблемы.

  • Убедитесь, что ваши клиенты Subversion настроены на автоматическое добавление eol-style:native свойство новых файлов ( командная строка, TortoiseSVN). В противном случае вы столкнетесь с этой проблемой снова при каждом добавлении новых файлов.
  • Проверьте свежую копию репозитория на компьютере с Windows. Прежде чем позволить Visual Studio прикоснуться к коду, убедитесь, что все окончания строк выполнены в стиле Windows. Используйте Visual Studio, чтобы внести некоторые изменения, затем снова проверьте окончания строк. Если они не все еще в стиле Windows, то виновником является Visual Studio. Проверьте свои настройки и убедитесь, что они не оставляют файлы как есть и не пытаются выполнять какие-либо виды автоматического преобразования или перекодирования.
  • Проверьте код на коробке Linux и используйте file Утилита для проверки каждого из исходных файлов. Вывод покажет, какой тип файловых окончаний используется. Убедитесь, что ни один из ваших файлов не сообщается "с CRLF, LF-разделителями строк". Это означает, что присутствуют оба типа окончания строки, и автоконверсия Subversion не всегда будет работать должным образом. Чтобы решить эту проблему, используйте dos2unix полезность.
Другие вопросы по тегам