2015-07-30 2 views
3

Может ли git rerere быть сконфигурирован так, чтобы он запоминал и применял разрешения слияния для определенных шаблонов файлов? Т.е.: только по рисунку pom.xml.Git rerere file pattern?

ответ

0

Это сложный вопрос, но я могу придумать решение, которое включает вызов скрипта сразу после операции слияния (но до любого ручного разрешения).

Прежде всего, кеш-разрешение конфликтов (.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) и запрошен из сценария.

Смежные вопросы