问题
Git doesn't always choose hunk boundaries correctly, when calculating a changeset from snapshots. git diff
has a --diff-algorithm
option that allows some tweaking in this regard; git diff --minimal
sometimes gives better results than git diff
alone.
Is there a way to get the same optimised changeset layout also for git add -p
(which basically shows the diff
hunks interactively)? It doesn't seem to allow the --diff-algorithm
option.
回答1:
TL;DR version
git -c diff.algorithm=minimal add -p
(requires Git version 1.8.4 or newer).
Details
Moving this from comment to answer after the last bit of research:
Since Git version 1.8.4, the interactive add perl script (which implements git add -p
) obeys the diff.algorithm
setting in your git configuration. This went in with commit 2cc0f53 (12 Jun 2013) by John Keeping (johnkeeping).
(Merged by Junio C Hamano -- gitster -- in commit 91fc159, 27 Jun 2013) :
When staging hunks interactively it is sometimes useful to use an alternative diff algorithm which splits the changes into hunks in a more logical manner. This is not possible because the plumbing commands called by add--interactive ignore the "diff.algorithm" configuration option (as they should).
Since add--interactive is a porcelain command it should respect this configuration variable. To do this, make it read diff.algorithm and pass its value to the underlying diff-index and diff-files invocations.
At this point, do not add options to "git add", "git reset" or "git checkout" (all of which can call git-add--interactive). If a user wants to override the value on the command line they can use:
git -c diff.algorithm=$ALGO ...
(with a fix in commit e5c2909 (23 Jun 2013) by Junio C Hamano (gitster); the fix is also in 1.8.4).
来源:https://stackoverflow.com/questions/37509770/is-it-possible-to-use-the-minimal-algorithm-for-interactive-adding