1
0
mirror of https://github.com/git/git.git synced 2024-09-29 16:41:53 +02:00
git/Documentation/git-diff-tree.txt
Junio C Hamano f345b0a066 [PATCH] Add -B flag to diff-* brothers.
A new diffcore transformation, diffcore-break.c, is introduced.

When the -B flag is given, a patch that represents a complete
rewrite is broken into a deletion followed by a creation.  This
makes it easier to review such a complete rewrite patch.

The -B flag takes the same syntax as the -M and -C flags to
specify the minimum amount of non-source material the resulting
file needs to have to be considered a complete rewrite, and
defaults to 99% if not specified.

As the new test t4008-diff-break-rewrite.sh demonstrates, if a
file is a complete rewrite, it is broken into a delete/create
pair, which can further be subjected to the usual rename
detection if -M or -C is used.  For example, if file0 gets
completely rewritten to make it as if it were rather based on
file1 which itself disappeared, the following happens:

    The original change looks like this:

	file0     --> file0' (quite different from file0)
	file1     --> /dev/null

    After diffcore-break runs, it would become this:

	file0     --> /dev/null
	/dev/null --> file0'
	file1     --> /dev/null

    Then diffcore-rename matches them up:

	file1     --> file0'

The internal score values are finer grained now.  Earlier
maximum of 10000 has been raised to 60000; there is no user
visible changes but there is no reason to waste available bits.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-05-30 10:35:49 -07:00

154 lines
4.2 KiB
Plaintext

git-diff-tree(1)
================
v0.1, May 2005
NAME
----
git-diff-tree - Compares the content and mode of blobs found via two tree objects
SYNOPSIS
--------
'git-diff-tree' [-p] [-r] [-z] [--stdin] [-B] [-M] [-R] [-C] [-S<string>] [--pickaxe-all] [-m] [-s] [-v] [-t] <tree-ish> <tree-ish> [<pattern>]\*
DESCRIPTION
-----------
Compares the content and mode of the blobs found via two tree objects.
Note that "git-diff-tree" can use the tree encapsulated in a commit object.
OPTIONS
-------
<tree-ish>::
The id of a tree object.
<pattern>::
If provided, the results are limited to a subset of files
matching one of these prefix strings.
ie file matches `/^<pattern1>|<pattern2>|.../`
Note that pattern does not provide any wildcard or regexp
features.
-p::
generate patch (see section on generating patches). For
git-diff-tree, this flag implies '-r' as well.
-B::
Break complete rewrite changes into pairs of delete and create.
-M::
Detect renames.
-C::
Detect copies as well as renames.
-R::
Output diff in reverse.
-S<string>::
Look for differences that contains the change in <string>.
--pickaxe-all::
When -S finds a change, show all the changes in that
changeset, not just the files that contains the change
in <string>.
-r::
recurse
-t::
show tree entry itself as well as subtrees. Implies -r.
-z::
\0 line termination on output
--root::
When '--root' is specified the initial commit will be showed as a big
creation event. This is equivalent to a diff against the NULL tree.
--stdin::
When '--stdin' is specified, the command does not take
<tree-ish> arguments from the command line. Instead, it
reads either one <commit> or a pair of <tree-ish>
separated with a single space from its standard input.
+
When a single commit is given on one line of such input, it compares
the commit with its parents. The following flags further affects its
behaviour. This does not apply to the case where two <tree-ish>
separated with a single space are given.
-m::
By default, "git-diff-tree --stdin" does not show
differences for merge commits. With this flag, it shows
differences to that commit from all of its parents.
-s::
By default, "git-diff-tree --stdin" shows differences,
either in machine-readable form (without '-p') or in patch
form (with '-p'). This output can be supressed. It is
only useful with '-v' flag.
-v::
This flag causes "git-diff-tree --stdin" to also show
the commit message before the differences.
Limiting Output
---------------
If you're only interested in differences in a subset of files, for
example some architecture-specific files, you might do:
git-diff-tree -r <tree-ish> <tree-ish> arch/ia64 include/asm-ia64
and it will only show you what changed in those two directories.
Or if you are searching for what changed in just `kernel/sched.c`, just do
git-diff-tree -r <tree-ish> <tree-ish> kernel/sched.c
and it will ignore all differences to other files.
The pattern is always the prefix, and is matched exactly. There are no
wildcards. Even stricter, it has to match complete path comonent.
I.e. "foo" does not pick up `foobar.h`. "foo" does match `foo/bar.h`
so it can be used to name subdirectories.
An example of normal usage is:
torvalds@ppc970:~/git> git-diff-tree 5319e4......
*100664->100664 blob ac348b.......->a01513....... git-fsck-cache.c
which tells you that the last commit changed just one file (it's from
this one:
commit 3c6f7ca19ad4043e9e72fa94106f352897e651a8
tree 5319e4d609cdd282069cc4dce33c1db559539b03
parent b4e628ea30d5ab3606119d2ea5caeab141d38df7
author Linus Torvalds <torvalds@ppc970.osdl.org> Sat Apr 9 12:02:30 2005
committer Linus Torvalds <torvalds@ppc970.osdl.org> Sat Apr 9 12:02:30 2005
Make "git-fsck-cache" print out all the root commits it finds.
Once I do the reference tracking, I'll also make it print out all the
HEAD commits it finds, which is even more interesting.
in case you care).
Output format
-------------
include::diff-format.txt[]
Author
------
Written by Linus Torvalds <torvalds@osdl.org>
Documentation
--------------
Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
GIT
---
Part of the link:git.html[git] suite