81e50eabf0
Update the diff-raw format as Linus and I discussed, except that it does not use sequence of underscore '_' letters to express nonexistence. All '0' mode is used for that purpose instead. The new diff-raw format can express rename/copy, and the earlier restriction that -M and -C _must_ be used with the patch format output is no longer necessary. The patch makes -M and -C flags independent of -p flag, so you need to say git-whatchanged -M -p to get the diff/patch format. Updated are both documentations and tests. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
95 lines
3.2 KiB
Plaintext
95 lines
3.2 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:
|
|
|
|
':' <mode> ' ' <mode> ' ' <sha1> ' ' <sha1> I <path> I <path> L
|
|
|
|
By default, I and L are '\t' and '\n' respectively. When '-z'
|
|
flag is in effect, both I and L are '\0'.
|
|
|
|
In each <mode>, <sha1> and <path> pair, left hand side describes
|
|
the left hand side of what is being compared (<tree-ish> in
|
|
git-diff-cache, <tree-ish-1> in git-diff-tree, cache contents in
|
|
git-diff-files). Non-existence is shown by having 000000 in the
|
|
<mode> column. That is, 000000 appears as the first <mode> for
|
|
newly created files, and as the second <mode> for deleted files.
|
|
|
|
Usually two <path> are the same. When rename/copy detection is
|
|
used, however, an "create" and another "delete" records can be
|
|
merged into a single record that has two <path>, old name and
|
|
new name.
|
|
|
|
<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...... file.c 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>.
|