Каков формат файла патча?
Что означает следующее?
diff -rBNu src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java
--- src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 2009-03-10 11:34:01.000000000 -0700
+++ src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 2009-03-10 14:11:55.000000000 -0700
@@ -4,9 +4,12 @@
+ int CJK = 21;
+ int DIGIT = 22;
int DEFAULT = 0;
String[] tokenImage = {
"<EOF>",
+ "\"OR\"",
"<WORD>",
"<ACRONYM>",
"<SIGRAM>",
@@ -39,6 +42,8 @@
"\"\\\"\"",
"\":\"",
"\"/\"",
+ "\"(\"",
+ "\")\"",
"\".\"",
"\"@\"",
"\"\\\'\"",
Ответы
Ответ 1
Опция -u
вы использовали, задает унифицированный формат. В этом формате первые две строки - это заголовок: ---
это исходный файл, +++
это новый файл и метки времени.
@@
заголовки блока
Затем следуют чанки (изменения), начинающиеся с @@-R,r +R,r @@
.
Это два диапазона: один с -
это диапазон для фрагмента в исходном файле, а другой - с +
диапазоном в новом файле. R
обозначает номер строки, с которой начинается операция сравнения.
Числа после запятой - это количество затронутых строк в каждом файле.
- Каждый раз, когда вы удаляете строку, число
+R
будет меньше, чем -R
. - Каждый раз, когда вы добавляете строку, число
+R
будет больше, чем -R
- Изменение строки добавит
0
к +R
. (тот же объем строк)
Куски строк кода
В этих чанках строки идентифицируются как добавления или удаления -
означает удаление, +
означает добавление. Строки, которые не изменились в этом чанке, не будут иметь ни +
ни -
перед ним.
В вашем примере это означает, что есть два чанка, или раздела, которые изменились между двумя файлами, и строки с +
в нем являются новыми, ничего не было удалено.
Вы можете найти гораздо больше информации о синтаксисе, выполнив поиск в Google для унифицированных различий.
Ответ 2
Старое имя файла
--- src.orig/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 2009-03-10 11:34:01.000000000 -0700
Новое имя файла
+++ src/java/org/apache/nutch/analysis/NutchAnalysisConstants.java 2009-03-10 14:11:55.000000000 -0700
-
-4
: чанк начинается со строки 4 в старом файле (включая строки контекста); -
9
: количество строк в чанке в старом файле, включая строки контекста (таким образом, общее количество строк, которые имеют -
или ничего перед ними); -
+4
: чанк начинается со строки 4 в новом файле; -
12
: количество строк в чанке в новом файле, включая строки контекста (таким образом, общее количество строк, которые имеют +
или ничего перед ними).
Примечание: я изменил diff, чтобы включить измененную строку, поэтому за удаленной строкой следует добавленная строка.
@@ -4,9 +4,12 @@
+ int CJK = 21;
+ int DIGIT = 22;
- int DEFAULT = 0;
+ int DEFAULT = 42;
String[] tokenImage = {
"<EOF>",
+ "\"OR\"",
"<WORD>",
"<ACRONYM>",
"<SIGRAM>",
То же, что и выше, но обратите внимание, что блок в новом файле начинается на 3 строки дальше, потому что предыдущий блок добавил чистую стоимость в 3 строки.
@@ -39,6 +42,8 @@
"\"\\\"\"",
"\":\"",
"\"/\"",
+ "\"(\"",
+ "\")\"",
"\".\"",
"\"@\"",
"\"\\\'\"",
Ответ 3
Символы +
означают, что эти строки были добавлены со времени последней версии NutchAnalysisConstants.java
. Строка @@
сообщает вам, что diff переместился в другой раздел файла, в этом случае строка 39 в оригинале или строка 43 в новом.
Ответ 4
Это зависит от того, что вы спрашиваете. Diff показывает разницу между двумя файлами. В вашем случае вы используете NutchAnalysisConstants.java
из двух разных мест и генерируете информацию об этих различиях.
-r
для diff означает "рекурсивный diff", хотя в этом случае он ничего не делает, поскольку вы просматриваете файлы, а не каталоги.
-B
означает игнорировать изменения, которые включают только пустые строки.
-N
означает, что если в directory1 у меня есть файл, но его нет в directory2, diff должен рассматривать его так, как если бы файл присутствовал, но был пустым в directory2 (таким образом, фактически давая вам полное содержимое файла в directory1),
-u
означает использование унифицированного формата вывода, который поддерживается только GNU diff и GNU patch.
Что касается вывода, эта ссылка может быть полезна для вас.