Может ли git rerere
быть сконфигурирован так, чтобы он запоминал и применял разрешения слияния для определенных шаблонов файлов? Т.е.: только по рисунку pom.xml
.Git rerere file pattern?
ответ
Это сложный вопрос, но я могу придумать решение, которое включает вызов скрипта сразу после операции слияния (но до любого ручного разрешения).
Прежде всего, кеш-разрешение конфликтов (.git/rr-cache
) - это , хранящийся в хэше блобера, а не по пути к файлу. Нет ничего, чтобы указать, на какой файл были получены разрешения, поэтому я думаю, что взлом в этом каталоге не будет жизнеспособным решением.
This quote от сопровождающего Джунио Хамано также поражает тот факт, что rerere является за слияния, а не за файл:
Существует нет «я не волнует, если есть хорошие резолюции запоминаются , которые не имеют какое-либо отношение к текущему слиянию, просто удалите все из них »- вот что такое« rm -fr .git/rr-cache ».
... что, разумеется, вам не подходит, поскольку выборочное удаление файлов с .git/rr-cache
не подходит для автоматизации в вашем прецеденте.
Функция, используемая для использования, может быть подкомандой forget
, которая принимает путь. Однако «забыв» может произойти только в контексте слияния, что делает его принципиально иным, чем что-то вроде .gitignore
, которое вы можете применять статически.
Но, очевидно, вы могли бы после слияния крюка, который вызывает скрипт, который:
итерации через конфликтующие файлы:
git diff --name-only --diff-filter=U
Для каждого файла, который вы хотите «un-rerere», забудьте об этом:
git rerere forget -- path/to/file
... и восстановить конфликт:
git checkout -m path/to/file
Затем продолжать с слиянием на обычном оставляя разрешения rerere для файлов, которые вы хотите помнить, нетронутыми.
Список файлов, на которые «reerere remembered» может быть проверен в репозитории (возможно, в файле .reremember
) и запрошен из сценария.