#diff #patch
#разница #исправление
Вопрос:
$ vim patch
Index: toPatch
===================================================================
--- toPatch
toPatch
@@ -2,4 2,4 @@
*/
-final public class XMLWriter {
public class XMLWriter {
$ vim toPatch
*/
final public class XMLWriter {
public static float CURRENT_VERSION=2.2f;
$ patch -p0 -ui patch
patching file toPatch
Hunk #1 succeeded at 1 with fuzz 2 (offset -1 lines).
Почему нечеткость и смещение строки? Это демонстрационный пример, в котором делается попытка разобраться в различиях и исправлениях, поскольку инструменты иногда / часто, похоже, работают не так, как ожидалось.
Ответ №1:
Патч выполняет некоторую базовую проверку согласованности diff и вашего файла, и если эти проверки завершаются неудачей, вы получаете смещение или нечеткость.
У вас смещение -1, поскольку исправление ожидает, что содержимое разницы соответствует строкам 2-4 вашего файла. Однако в вашем файле это строки 1-3.
У вас нечеткость> 0, поскольку первая строка контекста (два пробела и a */
) не соответствует строке в реальном файле (один пробел и a */
). Из-за этого патч выполнил второй проход, где он проигнорировал первую и последнюю строку контекста.
Это не объясняет, почему вы видите fuzz = 2, а не 1. Возможно, ошибка копирования-вставки файлов? Есть еще идеи, у кого-нибудь?
Комментарии:
1. все еще не уверен в актуальной проблеме тогда.. Я только что перешел
2. это случилось со мной при копировании / вставке содержимого файла исправления в мой редактор. В некоторых строках были только пробелы, но они были обрезаны до пустых строк, поэтому файл исправления применен правильно, но с предупреждениями о факторах нечеткости…
3. В первой строке патча нет двух пробелов. Первый пробел идентифицирует его только как контекстную строку. Второй пробел является частью строки.
Ответ №2:
Индексы в вашем patch
файле (числа между @@
) неверны.
- Как сказал @xofon, у вас проблема со стартовой строкой, у вас есть 2, но должно быть 1
- Но также второе число должно быть 3, а не 4, поскольку у вас есть 3 строки кода в вашем
patch
файле до применения исправления и 3 строки кода в вашемpatch
файле после применения исправления. - но с первой строкой проблемы нет
*/
. Вpatch
файле есть 2 пробела, но это ожидаемо, поскольку в первом столбце используется символ-
. Полученная вами нечеткость касалась используемого смещения (перемещение всех строк вверх на 1)
Итак, ваш patch
файл должен быть
$ cat patch
--- toPatch
toPatch
@@ -1,3 1,3 @@
*/
-final public class XMLWriter {
public class XMLWriter {
public static float CURRENT_VERSION=2.2f;
и с данным toPatch
файлом
$ cat toPatch
*/
final public class XMLWriter {
public static float CURRENT_VERSION=2.2f;
Тогда патч будет применяться без нечетких предупреждений...
$ patch -p0 -ui patch
patching file toPatch