Подтвердить что ты не робот

Использовать Git алгоритм терпения diff для интерактивного добавления

Я бы хотел использовать алгоритм Git терпения diff (тот, который вы получите, если вы вызываете git diff с аргументом --patience) с помощью git add -p. Как я могу это сделать?

Фон: я работаю с некоторыми XML файлами, а git diff обычный алгоритм производит довольно плохие различия из-за "несогласованных" тегов ввода/выхода. Если я запустил git diff --patience, я получаю гораздо более полезные различия, но нет очевидного способа использования этих различий в git add -p.

4b9b3361

Ответ 1

git add -p в настоящее время отклоняет флаги diff, но вы можете использовать опцию diff.algorithm config:

git config --global diff.algorithm patience

Новое в Git 1.8.2.

Ответ 2

Это сработало для меня:

git -c diff.algorithm=patience add -p [...]

Я запускаю последнюю версию git v2.1.0 в Cygwin.

Ответ 3

Хмммм... Одна вещь, которую вы могли бы сделать, это вывести вывод git diff во временное место, а затем прочитать его обратно с помощью git apply:

git diff --patience <commitA> <commitB> > /tmp/patch.out
# checkout a new branch or otherwise do what you need to prep
git apply < /tmp/patch.out

Это применит вывод diff к рабочему каталогу, но он не будет фиксировать или не выполнять изменения. Затем вы можете запустить git add -p, как обычно, а diff --patience - изменения, которые вы добавляете в интерактивном режиме.

Нет причин, по которым вы не могли бы напрямую передать diff в apply, если это лучше подходит для вашего рабочего процесса. Это то, что я делаю довольно регулярно, при перестройке собственных локальных веток для интеграции производства.

Похоже, вы также можете использовать его как стратегию слияния , поэтому могло бы быть так, что вместо интерактивного добавления diffs вы могли бы просто создать ветку с что вы хотите, затем объедините его.