git: новая пустая строка в EOF

Поэтому я запускаю git diff --check перед add файлов и commit их, а на двух конкретных файлах я получаю path/filename:linenumber: new blank line at EOF . Если я удалю последнюю пустую строку в этих файлах, я не получаю никаких сообщений, но я думаю, что это хороший стиль для завершения моих файлов с помощью новой строки. Как ни странно, другие файлы, которые, как я думаю, имеют точно такие же окончания, не дают никаких сообщений. Я новичок в git, используя git 2.0.1 на OS X Yosemite. Я использую vim как мой редактор.

Как я могу закончить мои файлы с помощью новой строки, избегая этого сообщения? Должен ли я игнорировать это?

Здесь есть две проблемы.

  • вы путаетесь о «новой линии» и «новой строке»:

    «Новая строка» – фактическая пустая строка (содержит только символ «новой строки»), а «новая строка» – это специальный символ, используемый для обозначения конца текущей строки .

    Большинство компиляторов, интерпретаторов и инструментов Unix ожидают, что ваши текстовые файлы заканчиваются новой линией, чтобы избежать двусмысленности при работе с несколькими файлами, а не с «новой строкой».

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

    Особенно не добавляя «новую строку» в EOF.

  • вы, вероятно, привыкли к плохому поведению:

    Символ «новой строки» традиционно интерпретируется как «ограничитель строки» инструментами Unix, большинством компиляторов и Vim. Это означает, что все, что приходит после этого символа, считается на другой линии. Поскольку этот символ является последним в файле, нет причин показывать строку, которая не существует для пользователя.

    Увы, большинство редакторов графического интерфейса интерпретируют его как «разделитель строк», что означает, что он отмечает разделение между двумя строками, и эти редакторы обычно показывают несуществующую строку в конце вашего файла, чтобы удовлетворить эту интерпретацию.

    Вероятно, я предполагаю слишком много, но похоже, что вы привыкли к этому неправильному поведению и пытаетесь имитировать его, добавив совершенно ненужную «новую строку» в конце ваших файлов.

Либо вы продолжаете добавлять «новые строки» в нижней части исходных файлов, считайте это своего рода директиву форматирования и кодирования и перестаете рассматривать эти сообщения Git как сообщения об ошибках.

Или вы перестанете добавлять эти бесполезные «новые строки».

Я бы пошел со вторым вариантом.

Из документации git diff :

–проверить

Предупреждать, если изменения вносят ошибки в пробелах. То, что считается ошибочными ошибками, управляется конфигурацией core.whitespace . По умолчанию заглавные пробелы (включая строки, состоящие исключительно из пробелов) и пробельный символ, который сразу же следует за символом табуляции внутри начального отступа строки, считаются пробельными ошибками. Выходы с ненулевым статусом при обнаружении проблем. Не совместим с –exit-кодом.

Соответственно, git config documentation :

core.whitespace

Список замечательных пробелов, разделенных запятыми, можно заметить. git diff будет использовать color.diff.whitespace чтобы выделить их, и git apply –whitespace = error будет рассматривать их как ошибки. Вы можете использовать префикс - для отключения любого из них (например, -trailing-space ):

  • blank-at-eol обрабатывает завершающие пробелы в конце строки как ошибку (включен по умолчанию).

  • space-before-tab обрабатывает пробельный символ, который появляется непосредственно перед символом табуляции в начальной части отступа строки как ошибка (по умолчанию включена).

  • indent-with-non-tab обрабатывает строку с отступом с символами пробела вместо эквивалентных вкладок как ошибку (по умолчанию она не включена).

  • tab-in-indent обрабатывает символ табуляции в начальной части отступа строки как ошибку (не включен по умолчанию).

  • blank-at-eof обрабатывает пустые строки, добавленные в конце файла, в качестве ошибки (включен по умолчанию).

  • trailing-space – это короткая рука, которая охватывает как blank-at-eol и blank-at-eof .

  • cr-at-eol обрабатывает возврат каретки в конце строки как часть терминатора линии, т. е. с ним, конечное пространство не запускается, если символ перед таким возвратом каретки не является пробелом (не включен по умолчанию ).

  • tabwidth=<n> указывает, сколько позиций символов занимает вкладка; это имеет значение для indent-with-non-tab и когда Git исправляет ошибки вложенного отступа. Ширина закладки по умолчанию – 8. Разрешенные значения: от 1 до 63.


Как вы можете видеть, blank-at-eof имеет значение по умолчанию. Вы можете отключить его, добавив -blank-at-eof в конфигурацию core.whitespace или, альтернативно, используя собственную конфигурацию core.whitespace .