Почему я должен использовать ядро.autocrlf=true в Git?
у меня есть репозиторий Git, который доступен как из Windows, так и из OS X, и который, как я знаю, уже содержит некоторые файлы с окончаниями строк CRLF. Насколько я могу судить, есть два способа справиться с этим:
Set
core.autocrlfдоfalseвезде
следуйте инструкциям здесь (эхо на страницах справки GitHub), чтобы преобразовать репозиторий, чтобы содержать только LF-окончания строк, а затем установить
core.autocrlfдоtrueна Окна иinputна OS X. Проблема с этим заключается в том, что если у меня есть какие-либо двоичные файлы в репозитории, что:
- не правильно помечены как двоичные в gitattributes, и
- случайно содержат как CRLFs, так и LFs,
они будут повреждены. Возможно, мой репозиторий содержит такие файлы.
так почему бы мне просто не отключить преобразование конца строки Git? Есть много неопределенных предупреждений о том, что веб о наличии core.autocrlf выключил вызывает проблемы, но очень мало конкретные ones; единственное, что я нашел до сих пор, это то, что kdiff3 не может обрабатывать окончания CRLF (не проблема для меня), и что некоторые текстовые редакторы имеют проблемы с окончанием строки (также не проблема для меня).
репозиторий является внутренним для моей компании, и поэтому мне не нужно беспокоиться о том, чтобы делиться им с людьми с различными настройками autocrlf или требованиями к завершению строки.
есть ли другие проблемы с тем, чтобы просто оставить окончания строк, как-это то, о чем я не знаю?
3 ответов:
только конкретные причины для установки
autocrlfдоtrueявляются:
- избежать
git statusпоказывает все ваши файлы какmodifiedиз-за автоматического преобразования EOL, выполненного при клонировании репозитория EOL Git на основе Unix в Windows (см. выпуск 83 например)- и ваши инструменты кодирования каким-то образом зависит от уроженца стиль EOL присутствует в вашем файле:
- например, генератор кода жестко, чтобы обнаружить уроженец Эол
- другие внешние пакеты (внешние для вашего РЕПО) с регулярным выражением или набором кода для обнаружения собственного EOL
- я считаю, что некоторые плагины Eclipse могут создавать файлы с CRLF независимо от платформы, что может быть проблемой.
если вы не можете увидеть конкретное лечение, которое должны дело с родной Эол, вам лучше оставив
autocrlfдоfalse.обратите внимание, что эта конфигурация будет местные один (потому что config не выталкивается из РЕПО в репо)
если вы хотите одну и ту же конфигурацию для всех пользователей, клонирующих это РЕПО, проверьте "что самое лучшее
CRLFстратегия обработки с git?", используяtextна.gitattributesfile.
Примечание: начиная с git 2.8 (март 2016), маркеры слияния будут уже нет ввести смешанную окончание строки (LF) в файле CRLF.
Смотрите "сделать git используйте символы не экранируются на его ""
Я разработчик .NET и уже много лет использую Git и Visual Studio. Моя сильная рекомендация - установить окончание строки в true. И сделайте это как можно раньше в течение всего срока службы вашего репозитория.
Как говорится, Я ненавижу, что Git меняет мои окончания строк. Система управления версиями должна только сохранять и извлекать работу, которую я делаю, она не должна ее изменять. Когда-либо. Но это так.
Что произойдет, если у вас нет каждого разработчика, установленного в true, в конечном итоге будет установлен один разработчик к истине. Это начнет изменять окончания строк всех ваших файлов на LF в вашем РЕПО. И когда пользователи установят false проверить их, Visual Studio предупредит вас и попросит вас изменить их. У вас будет 2 вещи происходят очень быстро. Во-первых, вы будете получать все больше и больше этих предупреждений, чем больше ваша команда, тем больше вы получите. Во-вторых, и что еще хуже, это то, что он покажет, что каждая строка каждого измененного файла была изменена(потому что окончания строк каждой строки будут изменены на true парень.) В конечном итоге вы больше не сможете надежно отслеживать изменения в своем РЕПО. Гораздо легче и чище заставить всех придерживаться истины, чем пытаться сохранить все ложное. Так же ужасно, как жить с тем фактом, что ваш доверенный исходный код делает то, что он не должен. Когда-либо.
обновление:
Примечание: как отметил VonC, начиная с Git 2.8, объединить маркеры будет не введите Unix-стиль окончания строк в файл в стиле Windows.
Оригинал:
одна маленькая икота, которую я заметил с этой настройкой, заключается в том, что когда есть конфликты слияния, строки git добавляют, чтобы отметить различия do не есть Windows line-endings, даже когда остальная часть файла делает, и вы можете получить файл со смешанными окончаниями строк, например:
// Some code<CR><LF> <<<<<<< Updated upstream<LF> // Change A<CR><LF> =======<LF> // Change B<CR><LF> >>>>>>> Stashed changes<LF> // More code<CR><LF>Это не вызывает у нас никаких проблем (я полагаю, что любой инструмент, который может обрабатывать оба типа окончаний строк, также будет иметь дело со смешанными окончаниями строк-конечно, все те, которые мы используем), но это то, о чем нужно знать.
другое* мы нашли, что при использовании
git diffчтобы просмотреть изменения в файл, содержащий строку окончаний окна, линиями, которые были добавлены дисплея их карета возвращается, таким образом:// Not changed + // New line added in^M +^M // Not changed // Not changed* это действительно не заслуживает термина:"проблема".
Comments