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
полезность.