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

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

как я могу иметь мои файлы в конце с newline в то время как избежать этого сообщения? Должен ли я игнорировать это?

2 ответов


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

  • вы смущены "новой строкой" против "новой строки":

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

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

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

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

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

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

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

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

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

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

Я бы выбрал второй вариант.


С git diff документация:

-- check

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

соответственно,git config документация:

ядра.пробел

список разделенных запятыми общих проблем с пробелами, которые нужно заметить. в git diff будет использовать color.diff.whitespace, чтобы выделить их, и git apply --whitespace=ошибка будем рассматривать их как ошибки. Вы можете префикс - отключить любой из их (например -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 обрабатывает возврат каретки в конце строки как часть Терминатор строки, т. е. с ним, trailing-space не срабатывает, если символ перед такой кареткой-return не является пробелом (по умолчанию не включен).

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


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