ddafa7e933
The score number that follow R/C status were parsed but the parse pointer was not updated, causing the entire line to become unrecognized. This patch fixes this problem. There was a test missing to catch this breakage, which this commit adds as t4009-diff-rename-4.sh. The diff-raw tests used in related t4005-diff-rename-2.sh (the same test without -z) and t4007-rename-3.sh were stricter than necessarily, despite that the comment for the tests said otherwise. This patch also corrects them. The documentation is updated to say that the status can optionally be followed by a number called "score"; it does not have to stay similarity index forever and there is no reason to limit it only to C and R. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
101 lines
3.5 KiB
Plaintext
101 lines
3.5 KiB
Plaintext
The output format from "git-diff-cache", "git-diff-tree" and
|
|
"git-diff-files" is very similar.
|
|
|
|
These commands all compare two sets of things; what are
|
|
compared are different:
|
|
|
|
git-diff-cache <tree-ish>::
|
|
compares the <tree-ish> and the files on the filesystem.
|
|
|
|
git-diff-cache --cached <tree-ish>::
|
|
compares the <tree-ish> and the cache.
|
|
|
|
git-diff-tree [-r] <tree-ish-1> <tree-ish-2> [<pattern>...]::
|
|
compares the trees named by the two arguments.
|
|
|
|
git-diff-files [<pattern>...]::
|
|
compares the cache and the files on the filesystem.
|
|
|
|
|
|
An output line is formatted this way:
|
|
|
|
in-place edit :100644 100644 bcd1234... 0123456... M file0
|
|
copy-edit :100644 100644 abcd123... 1234567... C68 file1 file2
|
|
rename-edit :100644 100644 abcd123... 1234567... R86 file1 file3
|
|
create :000000 100644 0000000... 1234567... N file4
|
|
delete :100644 000000 1234567... 0000000... D file5
|
|
unmerged :000000 000000 0000000... 0000000... U file6
|
|
|
|
That is, from the left to the right:
|
|
|
|
(1) a colon.
|
|
(2) mode for "src"; 000000 if creation or unmerged.
|
|
(3) a space.
|
|
(4) mode for "dst"; 000000 if deletion or unmerged.
|
|
(5) a space.
|
|
(6) sha1 for "src"; 0{40} if creation or unmerged.
|
|
(7) a space.
|
|
(8) sha1 for "dst"; 0{40} if creation, unmerged or "look at work tree".
|
|
(9) status, followed by optional "score" number.
|
|
(10) a tab or a NUL when '-z' option is used.
|
|
(11) path for "src"
|
|
(12) a tab or a NUL when '-z' option is used; only exists for C or R.
|
|
(13) path for "dst"; only exists for C or R.
|
|
(14) an LF or a NUL when '-z' option is used, to terminate the record.
|
|
|
|
<sha1> is shown as all 0's if new is a file on the filesystem
|
|
and it is out of sync with the cache. Example:
|
|
|
|
:100644 100644 5be4a4...... 000000...... M file.c
|
|
|
|
Generating patches with -p
|
|
--------------------------
|
|
|
|
When "git-diff-cache", "git-diff-tree", or "git-diff-files" are run
|
|
with a '-p' option, they do not produce the output described above
|
|
instead they produce a patch file.
|
|
|
|
The patch generation can be customized at two levels. This
|
|
customization also applies to "git-diff-helper".
|
|
|
|
1. When the environment variable 'GIT_EXTERNAL_DIFF' is not set,
|
|
these commands internally invoke "diff" like this:
|
|
|
|
diff -L a/<path> -L a/<path> -pu <old> <new>
|
|
+
|
|
For added files, `/dev/null` is used for <old>. For removed
|
|
files, `/dev/null` is used for <new>
|
|
+
|
|
The "diff" formatting options can be customized via the
|
|
environment variable 'GIT_DIFF_OPTS'. For example, if you
|
|
prefer context diff:
|
|
|
|
GIT_DIFF_OPTS=-c git-diff-cache -p $(cat .git/HEAD)
|
|
|
|
|
|
2. When the environment variable 'GIT_EXTERNAL_DIFF' is set, the
|
|
program named by it is called, instead of the diff invocation
|
|
described above.
|
|
+
|
|
For a path that is added, removed, or modified,
|
|
'GIT_EXTERNAL_DIFF' is called with 7 parameters:
|
|
|
|
path old-file old-hex old-mode new-file new-hex new-mode
|
|
+
|
|
where:
|
|
|
|
<old|new>-file:: are files GIT_EXTERNAL_DIFF can use to read the
|
|
contents of <old|ne>,
|
|
<old|new>-hex:: are the 40-hexdigit SHA1 hashes,
|
|
<old|new>-mode:: are the octal representation of the file modes.
|
|
|
|
+
|
|
The file parameters can point at the user's working file
|
|
(e.g. `new-file` in "git-diff-files"), `/dev/null` (e.g. `old-file`
|
|
when a new file is added), or a temporary file (e.g. `old-file` in the
|
|
cache). 'GIT_EXTERNAL_DIFF' should not worry about unlinking the
|
|
temporary file --- it is removed when 'GIT_EXTERNAL_DIFF' exits.
|
|
|
|
For a path that is unmerged, 'GIT_EXTERNAL_DIFF' is called with 1
|
|
parameter, <path>.
|