git_diff_find_t

Flags to control the behavior of diff rename/copy detection.

Values

ValueMeaning
GIT_DIFF_FIND_BY_CONFIG0

Obey diff.renames. Overridden by any other GIT_DIFF_FIND_... flag.

GIT_DIFF_FIND_RENAMES1u << 0

Look for renames? (--find-renames)

GIT_DIFF_FIND_RENAMES_FROM_REWRITES1u << 1

Consider old side of MODIFIED for renames? (--break-rewrites=N)

GIT_DIFF_FIND_COPIES1u << 2

Look for copies? (a la --find-copies).

GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED1u << 3

Consider UNMODIFIED as copy sources? (--find-copies-harder).

For this to work correctly, use git_diff_option_t.GIT_DIFF_INCLUDE_UNMODIFIED when the initial git_diff is being generated.

GIT_DIFF_FIND_REWRITES1u << 4

Mark significant rewrites for split (--break-rewrites=/M)

GIT_DIFF_BREAK_REWRITES1u << 5

Actually split large rewrites into delete/add pairs

GIT_DIFF_FIND_AND_BREAK_REWRITESGIT_DIFF_FIND_REWRITES | GIT_DIFF_BREAK_REWRITES

Mark rewrites for split and break into delete/add pairs

GIT_DIFF_FIND_FOR_UNTRACKED1u << 6

Find renames/copies for UNTRACKED items in working directory.

For this to work correctly, use git_diff_option_t.GIT_DIFF_INCLUDE_UNTRACKED when the initial git_diff is being generated (and obviously the diff must be against the working directory for this to make sense).

GIT_DIFF_FIND_ALL0x00FF

Turn on all finding features.

GIT_DIFF_FIND_IGNORE_LEADING_WHITESPACE0

Measure similarity ignoring leading whitespace (default)

GIT_DIFF_FIND_IGNORE_WHITESPACE1u << 12

Measure similarity ignoring all whitespace

GIT_DIFF_FIND_DONT_IGNORE_WHITESPACE1u << 13

Measure similarity including all data

GIT_DIFF_FIND_EXACT_MATCH_ONLY1u << 14

Measure similarity only by comparing SHAs (fast and cheap)

GIT_DIFF_BREAK_REWRITES_FOR_RENAMES_ONLY1u << 15

Do not break rewrites unless they contribute to a rename.

Normally, GIT_DIFF_FIND_AND_BREAK_REWRITES will measure the self- similarity of modified files and split the ones that have changed a lot into a DELETE / ADD pair. Then the sides of that pair will be considered candidates for rename and copy detection.

If you add this flag in and the split pair is *not* used for an actual rename or copy, then the modified record will be restored to a regular MODIFIED record instead of being split.

GIT_DIFF_FIND_REMOVE_UNMODIFIED1u << 16

Remove any UNMODIFIED deltas after find_similar is done.

Using GIT_DIFF_FIND_COPIES_FROM_UNMODIFIED to emulate the --find-copies-harder behavior requires building a diff with the GIT_DIFF_INCLUDE_UNMODIFIED flag. If you do not want UNMODIFIED records in the final result, pass this flag to have them removed.

Meta