2013-01-24 2 views
20

Я пробовал редактировать php-файл в TextWrangler с концами строк, установленными в Unix, в NetBeans и в vim. Когда я сохраняю diff в патче, а затем пытаюсь применить его, он дает ошибки в пробелах. Когда я набираю git diff, я могу видеть ^M на концах моих строк, но если я вручную удалю их в vim, он говорит, что мой файл исправления поврежден, а затем патч не применяется вообще.Мой diff содержит конечные пробелы - как избавиться от него?

создать патч с помощью следующей команды:

git diff > patchname.patch

И я применяю его, проверяя чистую версию файла, который должен быть исправлен и набрав

git apply patchname.patch

Как могу ли я создать этот патч без ошибок пробела? Я создал патчи раньше и никогда не сталкивался с этой проблемой.

+0

Возможно, вы захотите предоставить более подробную информацию о процессе создания патча. – Chronial

+0

Я добавил детали. Не уверен, насколько это полезно, но это не повредит. – beth

+0

Я столкнулся с той же проблемой и сделал некоторые исследования. Похоже, что git автоматически добавляет эти пробелы в 'git diff' и' fit show', поэтому любой патч, сделанный с таким кодом, будет иметь завершающие пробелы. Если локальный репозиторий linux kernel git локально (дерево ядра linus), вы можете запустить 'git show 402bae597e'. Он покажет вам конечное пробел перед статическим DEVICE_ATTR_RO (флаги); и закрывающие фигурные скобки в предыдущей строке, даже если они не присутствуют в коде. – Hamzahfrq

ответ

13

Вы уверены, что это серьезные ошибки? По умолчанию git будет предупреждать об ошибках пробела, но все равно их примет. Если они жесткие ошибки, вы должны были изменить некоторые настройки. Вы можете использовать флаг --whitespace= для git apply, чтобы контролировать это на основе каждого вызова. Попробуйте

git apply --whitespace=warn patchname.patch 

Это приведет к поведению по умолчанию, которое необходимо предупредить, но принять. Вы также можете использовать --whitespace=nowarn, чтобы полностью удалить предупреждения.

Конфигурационная переменная, которая контролирует это: apply.whitespace.


Для справки, пробельные ошибки здесь не являются ошибками с вашим патчем. Это стиль кода, который git, по умолчанию, жалуется на применение патчей. Примечательно, что ему не нравятся конечные пробелы. Аналогично git diff выделит ошибки пробела (если вы выводите на терминал и цвет включен). Поведение по умолчанию - это предупредить, но принять патч в любом случае, потому что не каждый проект фанатичен в отношении пробелов.

+1

Я это понимаю. Однако я смущен тем, откуда этот пробел. Я не спрашивал, нужно ли мне это делать, я спросил, как это исправить. – beth

+0

@beth: Зачем вам это исправлять? –

+1

Пробел исходит от патча, который вы пытаетесь применить. Это означает, что это произошло из-за того, что вы первоначально взяли. –

7

Try патч -p1 < filename.patch

+0

Что это делает? Откуда появился файл .diff? – beth

+0

его просто файл исправления – flash

+0

Я думаю, что ваш карат назад или чего-то не хватает. – beth

20

мерзавец применять --reject --whitespace = исправить mychanges.path

+2

Полезно автоматически исправлять ошибки в пробелах. --whitespace = fix гарантирует, что ошибки в пробеле фиксируются до применения пути, а -reject обеспечивает атомарность, поэтому рабочие файлы каталогов не изменяются, если патч не применяется. Источник: https://git-scm.com/docs/git-apply –

Смежные вопросы