Git фиксирует задержки на конечных пробелах на несуществующих строках - PullRequest
2 голосов
/ 08 декабря 2010

Я пытаюсь сделать коммит в Git, но получаю следующую ошибку:

$ git commit -m "Changed model name from Employee to Person for abstraction"
*
* You have some suspicious patch lines:
*
* In app/helpers/people_helper.rb
* trailing whitespace (line 28)
app/helpers/people_helper.rb:28:
* trailing whitespace (line 44)
app/helpers/people_helper.rb:44:

Отлично.Я уберу пробелы.Единственная проблема?Эти строки не существуют.

$ cat app/helpers/people_helper.rb
module PeopleHelper
end
$ 

Файл имеет длину всего две строки.В строках 28 и 44 не должно быть пробелов.

Что дает?

Я на Git версии 1.5.4 без хуков, кроме тех, которые установлены по умолчанию.

1 Ответ

1 голос
/ 16 апреля 2011

Git 1.5.4 - довольно старая версия Git (с февраля 2008 года); Я бы порекомендовал вам обновить до более новой версии. В более новых версиях (начиная с версии 1.6, я полагаю) по умолчанию не включаются ловушки семплов (я полагаю, что в старых версиях также не предполагалось включать ловушки семплов по умолчанию, но это было сделано путем отключения исполняемого бита, который иногда случайно получал установить на определенных платформах, теперь это делается путем присвоения им имен .sample, поэтому Git даже не будет смотреть на них, пока вы их не переименуете). Обратите внимание, что при обновлении все ваши существующие репозитории все равно будут иметь старые хуки, поэтому вам придется либо отключить их вручную (переименовать все в .git/hooks, чтобы закончить в .sample), либо просто клонировать свои репо в новый те, чтобы получить новые хранилища без старого мусора.

Что касается вашей конкретной проблемы, я не совсем уверен без дополнительной информации, почему это произойдет (вывод git-diff-index -p -M --cached HEAD, вероятно, поможет), но это, вероятно, потому, что способ, которым хук выборки проверял наличие конечных пробелов, был генерация патча, а затем его синтаксический анализ, поиск заголовков diff для получения имени файла, номеров строк diff для определения строки, строк, начинающихся с пробела для подсчета неизменных строк, и строк, начинающихся с +, для поиска измененных линий. Если что-то может запутать этот довольно простой анализатор патчей, он может получить совершенно неправильное имя файла и номер строки для ошибок, которые он сообщает.

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

...