Вариант 5, пользовательский драйвер слияния, вероятно, является способом приблизиться к тому, что вы хотите.Это на удивление легко сделать.Ниже приведен пример, который, я думаю, должен приблизить вас к желаемому поведению.
Сначала создайте скрипт драйвера слияния с именем merge-and-verify-driver
.Сделайте его исполняемым и поместите его в подходящее место (вы можете рассмотреть возможность включения этого скрипта в репозиторий, даже если от него будет зависеть файл конфигурации репозитория).Git собирается выполнить этот скрипт оболочки, чтобы выполнить слияние чувствительных файлов:
#!/bin/bash
git merge-file "${1}" "${2}" "${3}"
exit 1
Это просто выполняет поведение слияния по умолчанию, которое обычно делает сам Git.Ключевое отличие состоит в том, что скрипт всегда возвращает ненулевое значение (чтобы указать, что был конфликт, даже если слияние было фактически разрешено без конфликтов).
Далее, вам нужно сообщить Git о существовании вашегопользовательский драйвер слияния.Вы делаете это в конфигурационном файле репо (.git/config
):
[merge "verify"]
name = merge and verify driver
driver = ./merge-and-verify-driver %A %O %B
В этом примере я поместил merge-and-verify-driver
в каталог верхнего уровня репо (./
).Вам нужно будет соответственно указать путь к сценарию.
Теперь вам просто нужно дать чувствительным файлам надлежащие атрибуты, чтобы при объединении этих файлов использовался пользовательский драйвер слияния.Добавьте это к вашему .gitattributes
файлу:
*.sensitive merge=verify
Здесь я сказал Git, что любой файл с именем, совпадающим с шаблоном *.sensitive
, должен использовать пользовательский драйвер слияния.Очевидно, вам нужно использовать шаблон, который подходит для вашего файла (ов).