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) и запрашивается из сценария.

Другие вопросы по тегам