Clarify and extend the "git diff" format documentation
Move the similarity and dissimilarity index header description closer to where those extended headers are described. Describe and/or clarify the format used for file modes, pathnames, and the index header. Document that all "old" files refer to the state before applying the *entire* output, and all "new" files refer to the state thereafter. Signed-off-by: Andreas Gruenbacher <agruen@suse.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
9fbd8986bb
commit
9659df5282
|
@ -9,16 +9,15 @@ patch file. You can customize the creation of such patches via the
|
||||||
GIT_EXTERNAL_DIFF and the GIT_DIFF_OPTS environment variables.
|
GIT_EXTERNAL_DIFF and the GIT_DIFF_OPTS environment variables.
|
||||||
|
|
||||||
What the -p option produces is slightly different from the traditional
|
What the -p option produces is slightly different from the traditional
|
||||||
diff format.
|
diff format:
|
||||||
|
|
||||||
1. It is preceded with a "git diff" header, that looks like
|
1. It is preceded with a "git diff" header that looks like this:
|
||||||
this:
|
|
||||||
|
|
||||||
diff --git a/file1 b/file2
|
diff --git a/file1 b/file2
|
||||||
+
|
+
|
||||||
The `a/` and `b/` filenames are the same unless rename/copy is
|
The `a/` and `b/` filenames are the same unless rename/copy is
|
||||||
involved. Especially, even for a creation or a deletion,
|
involved. Especially, even for a creation or a deletion,
|
||||||
`/dev/null` is _not_ used in place of `a/` or `b/` filenames.
|
`/dev/null` is _not_ used in place of the `a/` or `b/` filenames.
|
||||||
+
|
+
|
||||||
When rename/copy is involved, `file1` and `file2` show the
|
When rename/copy is involved, `file1` and `file2` show the
|
||||||
name of the source file of the rename/copy and the name of
|
name of the source file of the rename/copy and the name of
|
||||||
|
@ -37,18 +36,39 @@ the file that rename/copy produces, respectively.
|
||||||
similarity index <number>
|
similarity index <number>
|
||||||
dissimilarity index <number>
|
dissimilarity index <number>
|
||||||
index <hash>..<hash> <mode>
|
index <hash>..<hash> <mode>
|
||||||
|
+
|
||||||
3. TAB, LF, double quote and backslash characters in pathnames
|
File modes are printed as 6-digit octal numbers including the file type
|
||||||
are represented as `\t`, `\n`, `\"` and `\\`, respectively.
|
and file permission bits.
|
||||||
If there is need for such substitution then the whole
|
+
|
||||||
pathname is put in double quotes.
|
Path names in extended headers do not include the `a/` and `b/` prefixes.
|
||||||
|
+
|
||||||
The similarity index is the percentage of unchanged lines, and
|
The similarity index is the percentage of unchanged lines, and
|
||||||
the dissimilarity index is the percentage of changed lines. It
|
the dissimilarity index is the percentage of changed lines. It
|
||||||
is a rounded down integer, followed by a percent sign. The
|
is a rounded down integer, followed by a percent sign. The
|
||||||
similarity index value of 100% is thus reserved for two equal
|
similarity index value of 100% is thus reserved for two equal
|
||||||
files, while 100% dissimilarity means that no line from the old
|
files, while 100% dissimilarity means that no line from the old
|
||||||
file made it into the new one.
|
file made it into the new one.
|
||||||
|
+
|
||||||
|
The index line includes the SHA-1 checksum before and after the change.
|
||||||
|
The <mode> is included if the file mode does not change; otherwise,
|
||||||
|
separate lines indicate the old and the new mode.
|
||||||
|
|
||||||
|
3. TAB, LF, double quote and backslash characters in pathnames
|
||||||
|
are represented as `\t`, `\n`, `\"` and `\\`, respectively.
|
||||||
|
If there is need for such substitution then the whole
|
||||||
|
pathname is put in double quotes.
|
||||||
|
|
||||||
|
4. All the `file1` files in the output refer to files before the
|
||||||
|
commit, and all the `file2` files refer to files after the commit.
|
||||||
|
It is incorrect to apply each change to each file sequentially. For
|
||||||
|
example, this patch will swap a and b:
|
||||||
|
|
||||||
|
diff --git a/a b/b
|
||||||
|
rename from a
|
||||||
|
rename to b
|
||||||
|
diff --git a/b b/a
|
||||||
|
rename from b
|
||||||
|
rename to a
|
||||||
|
|
||||||
|
|
||||||
combined diff format
|
combined diff format
|
||||||
|
|
Loading…
Reference in New Issue