Должен ли я совершить слияние, чтобы git-rerere записал мое разрешение конфликта? - PullRequest
17 голосов
/ 02 апреля 2012

Я использую git-rerere по прямому назначению, чтобы записывать разрешения конфликтов между двумя ветвями (основной и ветвью темы) по мере развития этих ветвей, без создания ненужных коммитов слияния.Однако даже после прочтения man-страницы git-rerere я немного не понимаю, когда rerere фактически записывает мое разрешение конфликта.Мой стандартный рабочий процесс для обнаружения и разрешения новых конфликтов слияния состоит в том, чтобы сделать git merge master из ветки темы, разрешить конфликты, затем организовать все файлы и зафиксировать слияние с помощью git commit -m "Finished test merge", а затем отменить слияние с помощью git reset --hard HEAD^, оставивпозади только записанных разрешений, сохраненных git-rerere.

Однако, это кажется немного глупым.Создать коммит и затем отменить его только для записи разрешения?Прочитав man-страницу для git-rerere, я все еще не совсем понял, когда она записывает мои разрешения.Достаточно ли просто разместить конфликтующие файлы или мне действительно нужно создать коммит слияния после разрешения конфликтов, как я это делал?

Ответы [ 2 ]

12 голосов
/ 05 апреля 2012

С справочной страницы:

Running the git rerere command immediately after a conflicted automerge
records the conflicted working tree files, with the usual conflict
markers <<<<<<<, =======, and >>>>>>> in them. Later, after you are
done resolving the conflicts, running git rerere again will record the
resolved state of these files.

И

As a convenience measure, git merge automatically invokes git rerere
upon exiting with a failed automerge and git rerere records the hand
resolve when it is a new conflict, or reuses the earlier hand resolve
when it is not. git commit also invokes git rerere when committing a
merge result. What this means is that you do not have to do anything
special yourself (besides enabling the rerere.enabled config variable).

Так что вам не нужно фиксировать и отменять фиксацию. Вы можете просто запустить git rerere без параметров для записи фиксации.

0 голосов
/ 23 сентября 2018

Достаточно ли просто разместить конфликтующие файлы

Вы должны обязательно разрешить конфликт, не оставляя маркеров конфликта.

См. commit f427869 ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Томас Гаммерер ”(tgummerer) *.1017 *.
(Объединено
Junio ​​C Hamano - gitster - in commit d88949d , 17 Sep 2018)

См. коммит b9b07ef (28 августа 2018 г.) Томас Гаммерер (tgummerer) .
Помощник: Джунио С Хамано (gitster) .
(Объединено Junio ​​C Hamano - gitster - в коммит 4dd0c4a , 17 сентября 2018 г.)

.gitattributes: добавить размер маркера конфликта для соответствующих файлов

Некоторые файлы в git.git содержат строки, похожие на маркеры конфликта, либо в примерах, либо в тестах, либо вслучай Documentation/gitk.txt из-за асциток.

HavИспользование маркеров конфликта той же длины, что и фактический контент, может сбивать людей с толку, и невозможно обработать для таких инструментов, как 'git rerere' .

Чтобы обойти это, установите для атрибута conflict-marker-size для этих файлов значение 32, что делает маркеры конфликта однозначными.

...