Как мне поступить с обработкой конфликтов слияния, чтобы мой хук мог работать как нужно?
Вы не можете сделать это из хука, потому что - как вы обнаружили - хук никогда
Вам нужно, чтобы пользователи вызывали вашу собственную команду вместо , работающую git merge
. Выполните команду git merge
и проверьте результат (включая состояние выхода), чтобы определить, удалось ли объединение.
(обратите внимание, что это означает, что они также не могут запустить git pull
, поскольку git pull
запускает git fetch
затем git merge
. Возможно, вам потребуется предоставить им команду для замены git pull
, если они относятся к категории людей, которым нравится команда git pull
.)
(В качестве отступления,кажется, что имеет смысл проверить, может ли package.json
потребоваться объединение до того, как начнет работу с git merge
: найдите базу слияния самостоятельно и используйте git rev-parse
для извлечения трех хеш-идентификаторов, для HEAD:package.json
, <merge-base>:package.json
и <theirs>:package.json
. Если совпадающие хэш-идентификаторы не совпадают, вы можете даже извлечь сами файлы, с помощью git show
или git cat-file -p
, чтобы выполнить проверки перед объединением, если это необходимо. три хеш-идентификатора совпадают, слияние тривиально: все три файла одинаковы, и Git будет сохранять package.json
как есть. Если база слияния и их совпадают, но HEAD
отличается, Git сохранит версию HEAD
. Если базы слияния и HEAD совпадают, но они различаютсяs, Git примет их версию. Если все три не не совпадают, Git попытается объединить данные json, как если бы они были текстовым ориентированным на строки, что, вероятно, приведет к бессмысленности.)