В git, как мне увеличить контекст для слияний?

Когда я объединяю большие изменения, git часто безнадежно запутывается, потому что не использует достаточно строк контекста. Это путается между похожими окончаниями двух разных подпрограмм, которые обе заканчиваются:

.
return 1;
.
}

(точки здесь используются для обозначения пустых строк)

Когда я использую «git diff», я могу сказать -U20, чтобы увидеть 20 строк контекста. Но могу ли я указать git использовать этот флаг и при слиянии?

Может ли ответ быть связан со стратегиями/вариантами слияния, такими как:

git merge -s recursive -X patience [branch]

person Will Sheppard    schedule 28.06.2012    source источник
comment
Связанный вопрос о терпении diff: stackoverflow.com/ вопросы/4045017/   -  person Todd A. Jacobs    schedule 28.06.2012


Ответы (2)


Насколько мне известно, нет никакого способа увеличить строки контекста во время слияния. Предполагается, что алгоритм терпеливых различий лучше справляется с вашим вариантом использования. Страница руководства git-merge(1) описывает это следующим образом:

С этой опцией merge-recursive тратит немного больше времени, чтобы избежать ошибок слияния, которые иногда возникают из-за неважных совпадающих строк (например, фигурных скобок из разных функций). Используйте это, когда объединяемые ветви сильно расходятся.

Поскольку это выглядит точно так же, как ситуация, которую вы описываете, терпение кажется специально разработанным, чтобы помочь вам. Вы можете попробовать это на одноразовой ветке следующим образом:

git checkout -b temp_merge_branch master
git merge --strategy-option=patience other_branch

Если слияние работает правильно, вы можете быстро перемотать основную ветку вперед с результатами. Если нет, вы можете просто выбросить временную ветку и поискать другие альтернативы.

person Todd A. Jacobs    schedule 28.06.2012

Используйте эти настройки, чтобы получить терпеливые различия с пятью строками контекста везде:

git config --global diff.algorithm patience
git config --global diff.context 5

Если вы часто используете --color-words, это тоже полезно:

git config --global diff.wordRegex '[A-z0-9_]+|[^[:space:]]'

Для первого параметра требуется Git 1.8. 2.

person Tobu    schedule 11.04.2013
comment
Для одного таймера вы можете использовать git -c diff.context=5 merge -Xpatience <some-branch> - person Joseph K. Strauss; 17.11.2015