Почему я должен использовать ядро.autocrlf=true в Git?



у меня есть репозиторий Git, который доступен как из Windows, так и из OS X, и который, как я знаю, уже содержит некоторые файлы с окончаниями строк CRLF. Насколько я могу судить, есть два способа справиться с этим:




  1. Set core.autocrlf до false везде



  2. следуйте инструкциям здесь (эхо на страницах справки GitHub), чтобы преобразовать репозиторий, чтобы содержать только LF-окончания строк, а затем установить core.autocrlf до true на Окна и input на OS X. Проблема с этим заключается в том, что если у меня есть какие-либо двоичные файлы в репозитории, что:




    1. не правильно помечены как двоичные в gitattributes, и

    2. случайно содержат как CRLFs, так и LFs,


    они будут повреждены. Возможно, мой репозиторий содержит такие файлы.




так почему бы мне просто не отключить преобразование конца строки Git? Есть много неопределенных предупреждений о том, что веб о наличии core.autocrlf выключил вызывает проблемы, но очень мало конкретные ones; единственное, что я нашел до сих пор, это то, что kdiff3 не может обрабатывать окончания CRLF (не проблема для меня), и что некоторые текстовые редакторы имеют проблемы с окончанием строки (также не проблема для меня).



репозиторий является внутренним для моей компании, и поэтому мне не нужно беспокоиться о том, чтобы делиться им с людьми с различными настройками autocrlf или требованиями к завершению строки.



есть ли другие проблемы с тем, чтобы просто оставить окончания строк, как-это то, о чем я не знаю?

706   3  

3 ответов:

только конкретные причины для установки autocrlf до true являются:

  • избежать git status показывает все ваши файлы как modified из-за автоматического преобразования EOL, выполненного при клонировании репозитория EOL Git на основе Unix в Windows (см. выпуск 83 например)
  • и ваши инструменты кодирования каким-то образом зависит от уроженца стиль EOL присутствует в вашем файле:
    • например, генератор кода жестко, чтобы обнаружить уроженец Эол
    • другие внешние пакеты (внешние для вашего РЕПО) с регулярным выражением или набором кода для обнаружения собственного EOL
    • я считаю, что некоторые плагины Eclipse могут создавать файлы с CRLF независимо от платформы, что может быть проблемой.

если вы не можете увидеть конкретное лечение, которое должны дело с родной Эол, вам лучше оставив autocrlf до false.

обратите внимание, что эта конфигурация будет местные один (потому что config не выталкивается из РЕПО в репо)

если вы хотите одну и ту же конфигурацию для всех пользователей, клонирующих это РЕПО, проверьте "что самое лучшее CRLF стратегия обработки с git?", используя text на .gitattributes file.


Примечание: начиная с 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

    Ничего не найдено.