Мой diff содержит конечные пробелы - как избавиться от него?

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

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

git diff > patchname.patch

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

git apply patchname.patch

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

5 ответов


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

git apply --whitespace=warn patchname.patch

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

переменная config, которая управляет этим apply.whitespace.


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


git apply --reject --whitespace=fix mychanges.path


попробуйте patch-p1


решение одной строки:

emacs <filename> -f delete-trailing-whitespace -f save-buffer -f kill-emacs

источник: https://wiki.gnome.org/Projects/GnomeShell/Development/WorkingWithPatches


Я думаю, что на вопрос о том, как справиться с пробелами, был дан адекватный ответ, но вы спросили, откуда он взялся. Вы упомянули ^M в конце строк: вот как Git показывает окончания строк Windows. Может быть, попробуйте запустить dos2unix в исходных файлах перед созданием патчей или используйте редактор, который поддерживает исходные окончания строк.