1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-29 02:46:38 +02:00

Minor clarifications in diffcore documentation

Signed-off-by: Chris Shoemaker <c.shoemaker at cox.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
c.shoemaker@cox.net 2005-10-29 00:15:49 -04:00 committed by Junio C Hamano
parent 1cb7f22e5c
commit 59df2a11fe

View File

@ -6,13 +6,12 @@ June 2005
Introduction
------------
The diff commands git-diff-index, git-diff-files, and
git-diff-tree can be told to manipulate differences they find
in unconventional ways before showing diff(1) output. The
manipulation is collectively called "diffcore transformation".
This short note describes what they are and how to use them to
produce diff outputs that are easier to understand than the
conventional kind.
The diff commands git-diff-index, git-diff-files, git-diff-tree, and
git-diff-stages can be told to manipulate differences they find in
unconventional ways before showing diff(1) output. The manipulation
is collectively called "diffcore transformation". This short note
describes what they are and how to use them to produce diff outputs
that are easier to understand than the conventional kind.
The chain of operation
@ -29,7 +28,10 @@ files:
- git-diff-files compares contents of the index file and the
working directory;
- git-diff-tree compares contents of two "tree" objects.
- git-diff-tree compares contents of two "tree" objects;
- git-diff-stages compares contents of blobs at two stages in an
unmerged index file.
In all of these cases, the commands themselves compare
corresponding paths in the two sets of files. The result of
@ -65,14 +67,23 @@ format sections of the manual for git-diff-\* commands) or
diff-patch format.
diffcore-pathspec
diffcore-pathspec: For Ignoring Files Outside Our Consideration
-----------------
The first transformation in the chain is diffcore-pathspec, and
is controlled by giving the pathname parameters to the
git-diff-* commands on the command line. The pathspec is used
to limit the world diff operates in. It removes the filepairs
outside the specified set of pathnames.
outside the specified set of pathnames. E.g. If the input set
of filepairs included:
------------------------------------------------
:100644 100644 bcd1234... 0123456... M junkfile
------------------------------------------------
but the command invocation was "git-diff-files myfile", then the
junkfile entry would be removed from the list because only "myfile"
is under consideration.
Implementation note. For performance reasons, git-diff-tree
uses the pathname parameters on the command line to cull set of
@ -80,7 +91,7 @@ filepairs it feeds the diffcore mechanism itself, and does not
use diffcore-pathspec, but the end result is the same.
diffcore-break
diffcore-break: For Splitting Up "Complete Rewrites"
--------------
The second transformation in the chain is diffcore-break, and is
@ -115,7 +126,7 @@ the original is used), and can be customized by giving a number
after "-B" option (e.g. "-B75" to tell it to use 75%).
diffcore-rename
diffcore-rename: For Detection Renames and Copies
---------------
This transformation is used to detect renames and copies, and is
@ -136,16 +147,16 @@ merges these filepairs and creates:
:100644 100644 0123456... 0123456... R100 fileX file0
------------------------------------------------
When the "-C" option is used, the original contents of modified
files and contents of unchanged files are considered as
candidates of the source files in rename/copy operation, in
addition to the deleted files. If the input were like these
filepairs, that talk about a modified file fileY and a newly
When the "-C" option is used, the original contents of modified files,
and deleted files (and also unmodified files, if the
"\--find-copies-harder" option is used) are considered as candidates
of the source files in rename/copy operation. If the input were like
these filepairs, that talk about a modified file fileY and a newly
created file file0:
------------------------------------------------
:100644 100644 0123456... 1234567... M fileY
:000000 100644 0000000... 0123456... A file0
:000000 100644 0000000... bcd3456... A file0
------------------------------------------------
the original contents of fileY and the resulting contents of
@ -154,14 +165,14 @@ changed to:
------------------------------------------------
:100644 100644 0123456... 1234567... M fileY
:100644 100644 0123456... 0123456... C100 fileY file0
:100644 100644 0123456... bcd3456... C100 fileY file0
------------------------------------------------
In both rename and copy detection, the same "extent of changes"
algorithm used in diffcore-break is used to determine if two
files are "similar enough", and can be customized to use
similarity score different from the default 50% by giving a
number after "-M" or "-C" option (e.g. "-M8" to tell it to use
a similarity score different from the default of 50% by giving a
number after the "-M" or "-C" option (e.g. "-M8" to tell it to use
8/10 = 80%).
Note. When the "-C" option is used with `\--find-copies-harder`
@ -173,7 +184,7 @@ git-diff-\* commands can detect copies only if the file that was
copied happened to have been modified in the same changeset.
diffcore-merge-broken
diffcore-merge-broken: For Putting "Complete Rewrites" Back Together
---------------------
This transformation is used to merge filepairs broken by
@ -215,7 +226,7 @@ prefixed with '-', followed by the entire contents of new
version prefixed with '+'.
diffcore-pickaxe
diffcore-pickaxe: For Detecting Addition/Deletion of Specified String
----------------
This transformation is used to find filepairs that represent
@ -230,7 +241,7 @@ string appeared in this changeset". It also checks for the
opposite case that loses the specified string.
When `\--pickaxe-all` is not in effect, diffcore-pickaxe leaves
only such filepairs that touches the specified string in its
only such filepairs that touch the specified string in its
output. When `\--pickaxe-all` is used, diffcore-pickaxe leaves all
filepairs intact if there is such a filepair, or makes the
output empty otherwise. The latter behaviour is designed to
@ -238,19 +249,19 @@ make reviewing of the changes in the context of the whole
changeset easier.
diffcore-order
diffcore-order: For Sorting the Output Based on Filenames
--------------
This is used to reorder the filepairs according to the user's
(or project's) taste, and is controlled by the -O option to the
git-diff-* commands.
This takes a text file each of whose line is a shell glob
This takes a text file each of whose lines is a shell glob
pattern. Filepairs that match a glob pattern on an earlier line
in the file are output before ones that match a later line, and
filepairs that do not match any glob pattern are output last.
As an example, typical orderfile for the core git probably
As an example, a typical orderfile for the core git probably
would look like this:
------------------------------------------------