To understand the diff APIs, you should know the following terms:
diff
represents the cumulative list of differences between two
snapshots of a repository (possibly filtered by a set of file name
patterns). This is the git_diff
object.delta
is a file pair with an old and new revision. The old version
may be absent if the file was just created and the new version may be
absent if the file was deleted. A diff is mostly just a list of deltas.binary
file / delta is a file (or pair) for which no text diffs
should be generated. A diff can contain delta entries that are
binary, but no diff content will be output for those files. There is
a base heuristic for binary detection and you can further tune the
behavior with git attributes or diff flags and option settings.hunk
is a span of modified lines in a delta along with some stable
surrounding context. You can configure the amount of context and other
properties of how hunks are generated. Each hunk also comes with a
header that described where it starts and ends in both the old and new
versions in the delta.line
is a range of characters inside a hunk. It could be a context
line (i.e. in both old and new versions), an added line (i.e. only in
the new version), or a removed line (i.e. only in the old version).
Unfortunately, we don't know anything about the encoding of data in the
file being diffed, so we cannot tell you much about the line content.
Line data will not be NUL-byte terminated, however, because it will be
just a span of bytes inside the larger file.The diff object that contains all individual file deltas
This is an opaque structure which is allocated by git_diff_get_stats
You are responsible for releasing the object memory when done, using the git_diff_stats_free()
function.
Description of one side of a delta
Description of changes to one entry
Structure describing options about how the diff should be executed
The contents of one of the files in a binary diff
Structure describing the binary contents of a diff
Structure describing a hunk of a diff
Structure describing a line (or data span) of a diff
Pluggable similarity metric
Control behavior of rename and copy detection
Options for controlling the formatting of the generated e-mail
Flags for diff options in via the flags
value in the git_diff_options
.
Flags for the delta object and the file objects on each side
What type of change is described by a git_diff_delta?
When producing a binary diff, the binary data returned will be either the deflated full ("literal") contents of the file, or the deflated binary delta between the two sides (whichever is smaller)
Line origin constants
Flags to control the behavior of diff rename/copy detection
Possible output formats for diff data
Formatting options for diff stats
Formatting options for diff e-mail generation
Diff notification callback function
When iterating over a diff, callback that will be made per file
When iterating over a diff, callback that will be made for binary content within the diff
When iterating over a diff, callback that will be made per hunk
When iterating over a diff, callback that will be made per text diff line
Initializes a git_diff_options
with default values creating an instance with GIT_DIFF_OPTIONS_INIT.
Initializes a git_diff_find_options
with default values creating an instance with GIT_DIFF_FIND_OPTIONS_INIT.
Deallocate a diff
Create a diff with the difference between two tree objects
Create a diff between a tree and repository index
Create a diff between the repository index and the workdir directory
Create a diff between a tree and the working directory
Create a diff between a tree and the working directory using index data to account for staged deletes, tracked files, etc
Merge one diff into another
Transform a diff marking file renames, copies, etc
Query how many diff records are there in a diff
Query how many diff deltas are there in a diff filtered by type
Return the diff delta for an entry in the diff list
Check if deltas are sorted case sensitively or insensitively
Loop over all deltas in a diff issuing callbacks
Look up the single character abbreviation for a delta status code
Iterate over a diff generating formatted text output
Directly run a diff on two blobs
Directly run a diff between a blob and a buffer
Directly run a diff between two buffers
Accumlate diff statistics for all patches
Get the total number of files changed in a diff
Get the total number of insertions in a diff
Get the total number of deletions in a diff
Print diff statistics to a git_buf
Deallocate a git_diff_stats
Create an e-mail ready patch from a diff
Create an e-mail ready patch for a commit
Initializes a git_diff_format_email_options
with default values