Skip to content

Commit

Permalink
Clarify and extend the "git diff" format documentation
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Andreas Gruenbacher authored and Junio C Hamano committed Oct 19, 2010
1 parent 9fbd898 commit 9659df5
Showing 1 changed file with 30 additions and 10 deletions.
40 changes: 30 additions & 10 deletions Documentation/diff-generate-patch.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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.

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
this:
1. It is preceded with a "git diff" header that looks like this:

diff --git a/file1 b/file2
+
The `a/` and `b/` filenames are the same unless rename/copy is
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
name of the source file of the rename/copy and the name of
Expand All @@ -37,18 +36,39 @@ the file that rename/copy produces, respectively.
similarity index <number>
dissimilarity index <number>
index <hash>..<hash> <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.

+
File modes are printed as 6-digit octal numbers including the file type
and file permission bits.
+
Path names in extended headers do not include the `a/` and `b/` prefixes.
+
The similarity index is the percentage of unchanged lines, and
the dissimilarity index is the percentage of changed lines. It
is a rounded down integer, followed by a percent sign. The
similarity index value of 100% is thus reserved for two equal
files, while 100% dissimilarity means that no line from the old
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
Expand Down

0 comments on commit 9659df5

Please sign in to comment.