Вопрос по netbeans, textwrangler, whitespace, removing-whitespace, git – Мой дифференциал содержит конечные пробелы - как от него избавиться?

33

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

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

git diff > patchname.patch

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

git apply patchname.patch

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

@Chronial Эту проблему можно воспроизвести, добавив строку в начало или начало метода (где у вас есть что-то написанное в начале строки, например открывающая / закрывающая скобка или прототип функции). Тогда бегиgit diff, Вы можете увидеть дополнительные пробелы перед неизмененными файлами. Затем они знакомятся с патчем, когдаgit format-patch используется Hamzahfrq
Я добавил детали. Не уверен, насколько это будет полезно, но можетбольно beth
Возможно, вы захотите дать более подробную информацию о процессе создания патча. Chronial
Я сталкиваюсь с той же проблемой и провел некоторые исследования. Похоже, Git автоматически добавляет эти пробелы вgit diff а такжеfit showпоэтому любой патч, сделанный с таким кодом, будет иметь конечные пробелы. Если у вас локально есть git-репозиторий ядра Linux (дерево ядра linus), вы можете запуститьgit show 402bae597e, Он покажет вам пробельные символы перед статическим DEVICE_ATTR_RO (flags); и закрывающие скобки в предыдущей строке, даже если они не присутствуют в коде. Hamzahfrq

Ваш Ответ

4   ответа
24

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

git apply --whitespace=warn patchname.patch

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

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

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

Ладно, только представь, что для меня важно вообще не иметь конечных пробелов. Я упоминал о попытке удалить его в нескольких разных редакторах. "Удаляя замыкающие пробелы » ISN»действительно ответ на вопроскак убрать конечные пробелы ", Извините, если мне было неясно. beth
Пробел исходит от патча, который выпытаемся подать заявку. Что означает, что это было из различий, которые вы изначально взяли. Lily Ballard
@beth: Удалив конечный пробел в вашем источнике перед созданием различий? Или вы можете просто пойти дальше и использоватьgit apply --whitespace=fix patchname.patch, который исправит пробельные ошибки, которые он видит для вас. Lily Ballard
Я это понимаю. Тем не менее, я не понимаю, откуда взялись эти пробелы. Я не't спросить, должен ли я заботиться об этом, я спросил, как это исправить. beth
0

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

2

однострочное решение:

emacs  -f delete-trailing-whitespace -f save-buffer -f kill-emacs

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

26

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

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

Похожие вопросы