Почему мой патч выходит в двоичном формате?
Я различаю две директории, 220 и sue, следующим образом:
diff -r 220 sue > diff.txt
Впоследствии каталог выглядит следующим образом:
$ ls -al
total 20
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 10:44 .
drwxrwx---+ 1 SYSTEM SYSTEM 0 Jun 24 09:52 ..
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 09:54 220
-rw-rwxr--+ 1 jempty Domain Users 15463 Jun 24 10:44 diff.txt
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 09:55 sue
Подтверждением diff.txt является текст следующим образом:
$ file diff.txt
diff.txt: HTML document, ASCII text, with very long lines, with CRLF, LF line terminators
Вышесказанное в первую очередь демонстрирует, что я могу использовать diff и вижу, что не так уж много различий.
Затем создайте файл патча в соответствии с предложением https://docs.moodle.org/dev/How_to_create_a_patch:
$ diff -Naur 220 sue > patch.txt
Результаты в каталоге выглядят следующим образом:
$ ls -al
total 133836
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 10:57 .
drwxrwx---+ 1 SYSTEM SYSTEM 0 Jun 24 09:52 ..
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 09:54 220
-rw-rwxr--+ 1 jempty Domain Users 15463 Jun 24 10:44 diff.txt
-rw-rwxr--+ 1 jempty Domain Users 137024100 Jun 24 10:57 patch.txt
drwxrwx---+ 1 Administrators Domain Users 0 Jun 24 09:55 sue
Как вы можете видеть, файл patch.txt огромен и, как оказалось, он двоичный:
$ file patch.txt
patch.txt: data
Должен ли я использовать patch
команда вместо diff
1 ответ
У вас есть двоичные файлы (программы, библиотеки DLL, файлы данных и т. Д.) В любом 220
или же sue
, или оба.
Первая команда (diff -r
) признает, что некоторые файлы являются двоичными, и когда это так, diff
просто распечатает сообщение, что они отличаются. Например, если оба 220
а также sue
есть бинарный файл foo.dat
в них вы ожидаете, что результат будет примерно таким:
Binary files 220/foo.dat and sue/foo.dat differ
Вторая команда имеет -a
флаг, который говорит diff
безоговорочно относиться ко всем файлам как к незашифрованному тексту, чтобы он сравнивал и печатал необработанный двоичный контент различий между 220/foo.dat
а также sue/foo.dat
, поскольку diff
сравнивает построчно, и двоичные файлы обычно имеют несколько разрывов строк, строки, сравниваемые и показанные в выходных данных, будут довольно большими даже для относительно небольших файлов.
Чтобы уменьшить размер diff
вывод, не используйте -a
флаг:
$ diff -Nur 220 sue > patch.txt
Если вас не волнуют различия между двоичными файлами, вы можете отфильтровать вывод, чтобы исключить их:
$ diff -Nur 220 sue | grep -v '^Binary files.*differ' > patch.txt
Чтобы ответить на ваш последний вопрос, patch
противоположность diff
так что вы не будете использовать patch
Вот. Ты используешь diff
чтобы найти различия между файлами, и вы используете patch
применять различия от diff
вывод в эти файлы. Термины используются взаимозаменяемо при обращении к выводу diff
,