Назад | Перейти на главную страницу

Diff всегда не может применить исправление к файлам, которые я сделал?

У меня на сервере есть файлы, для которых я хотел сделать патч, поэтому я взял один из файлов для тестирования:

cp /path/file ~/file

Итак, теперь у меня есть тот же самый файл в моем корневом каталоге, поэтому я вношу любые необходимые изменения в файл в ~ / file, и теперь я запускаю команду diff для двух файлов:

diff -Nuar /path/file ~/file > my_file.patch

Я также пробовал:

diff -u /path/file ~/file > my_file.patch
diff -c /path/file ~/file > my_file.patch
diff /path/file ~/file > my_file.patch

Теперь, как вы можете видеть, в файлах нет никаких различий, кроме того, что я только что изменил, но вместо создания my_file.patch только с кодом для исправления изменений, которые я внес в / path / file, он всегда создает полный файл с все содержимое / path / file помечено для удаления, а содержимое ~ / file отмечено для добавления.

Затем пытаюсь применить патч:

patch -p0 < ~/my_file.patch

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

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

Есть идеи, в чем может быть проблема? кодировка, формат? решения?

Возможно ли, что некоторые файлы имеют окончания строки Windows (DOS) вместо новой строки Unix? Попробуйте бежать dos2unix на них, прежде чем делать diff.

Обе dos2unix и fromdos (в моей системе первый является символической ссылкой на второй) принимает имена файлов в командной строке и выполняет преобразование на месте. Вы можете использовать -b возможность сделать резервную копию. Если у вас много этих файлов в разных каталогах, вы можете использовать find обработать их.

find /dir/to/start -type f -name "foo*" -exec fromdos -b {} +

Затем, когда вы будете удовлетворены тем, что все прошло хорошо:

find /dir/to/start -type f -name "foo*.bak"  -delete

для удаления резервных копий.

patch очень чувствителен к своему текущему каталогу и к -p вариант. Вы уверены, что пытаетесь применить патч из правильного места? Вы указываете префикс (через -p) что соответствует содержимому вашего файла патча?