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 как сообщения об ошибках.
или вы прекратите добавлять эти бесполезные "новые строки".
Я бы выбрал второй вариант.
-- 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
конфигурации.