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 для концы строк на "родные" (то есть: 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, поэтому мне не придется иметь дело с этой проблемой. .

Спасибо.


person Cloud    schedule 09.09.2015    source источник
comment
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


Ответы (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.
person bta    schedule 10.09.2015