Какой формат файла патча? - PullRequest
56 голосов
/ 12 июня 2009

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

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

Ответы [ 4 ]

89 голосов
/ 12 июня 2009

Используемая опция -u указывает унифицированный формат. В этом формате первые две строки представляют собой заголовок: --- - исходный файл, +++ - новый файл и метки времени.

@@ заголовки блока

Затем следуют чанки (изменения), начинающиеся с синтаксиса @@ -R,r +R,r @@.

Это два диапазона: один с - - это диапазон для фрагмента в исходном файле, а другой - с + в новом файле. R обозначает номер строки, с которой начинается операция diff.

Числа после запятой количество затронутых строк в каждом файле .

  • Каждый раз, когда вы удаляете строку, число +r будет на меньше , чем -r.
  • Каждый раз, когда вы добавляете строку, число +r будет больше , чем -r
  • Изменение строки добавит 0 к номеру +r. (тот же объем строк)

Куски строк кода

В этих чанках строки идентифицируются как добавления или удаления - означает удаление, + означает добавление. Строки, которые не изменились в этом чанке, не будут иметь ни +, ни - перед ним.

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

Вы можете найти гораздо больше информации о синтаксисе, выполнив поиск в Google по унифицированному diff.

13 голосов
/ 15 декабря 2016

старое имя файла

--- 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 @@
     "\"\\\"\"",
     "\":\"",
     "\"/\"",
+    "\"(\"",
+    "\")\"",
     "\".\"",
     "\"@\"",
     "\"\\\'\"",
1 голос
/ 12 июня 2009

Символ + означает, что эти строки были добавлены с последней версии NutchAnalysisConstants.java. Строка @@ говорит о том, что diff перешел на другой раздел файла, в данном случае это строка 39 в оригинале или строка 43 в новом.

0 голосов
/ 12 июня 2009

Это зависит от того, что вы спрашиваете. Diff показывает разницу между двумя файлами. В вашем случае вы используете NutchAnalysisConstants.java из двух разных мест и генерируете информацию об этих различиях.

-r для diff означает «рекурсивный анализ», хотя в этом случае он ничего не делает, поскольку вы просматриваете файлы, а не каталоги.

-B означает игнорировать изменения, которые включают только пустые строки.

-N означает, что если в каталоге 1 у меня есть файл, но его нет в каталоге 2, diff должен рассматривать его так, как если бы файл присутствовал, но был пуст в каталоге 2 (таким образом, фактически давая вам полное содержимое файла в каталоге1).

-u означает использование унифицированного формата вывода, который поддерживается только GNU diff и GNU patch.

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

...