Подтвердить что ты не робот

Каков формат файла патча?

Что означает следующее?

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 @@
     "\"\\\"\"",
     "\":\"",
     "\"/\"",
+    "\"(\"",
+    "\")\"",
     "\".\"",
     "\"@\"",
     "\"\\\'\"",
4b9b3361

Ответ 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.

Что касается вывода, эта ссылка может быть полезна для вас.