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