99665af5c0
It used to be that diff-tree needed helper support to parse its raw output to generate diffs, but these days git-diff-* family produces the same output and the helper is not tied to diff-tree anymore. Drop "tree" from its name. This commit is done separately to record just the rename and no file content changes. The changes in the renamed files are recorded in the next commit. Signed-off-by: Junio C Hamano <junkio@cox.net> Bundled with the changes in the unrenamed files. Signed-off-by: Petr Baudis <pasky@ucw.cz>
90 lines
2.8 KiB
Plaintext
90 lines
2.8 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.
|
|
|
|
The following desription uses "old" and "new" to mean those
|
|
compared entities.
|
|
|
|
For files in old but not in new (i.e. removed):
|
|
|
|
-<mode> \t <type> \t <object> \t <path>
|
|
|
|
For files not in old but in new (i.e. added):
|
|
|
|
+<mode> \t <type> \t <object> \t <path>
|
|
|
|
For files that differ:
|
|
|
|
*<old-mode>-><new-mode> \t <type> \t <old-sha1>-><new-sha1> \t <path>
|
|
|
|
<new-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 blob 5be4a4.......->000000....... 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>.
|