В этом вопросе говорится все. Есть ли способ выполнить действие перед слиянием? Я предполагаю, что есть способ использовать крюк pre-commit
, но я не совсем уверен.
Как мне написать предварительный слияние в Git?
Ответ 1
Вы можете попробовать использовать крючок prepare-commit-msg
. Вторым аргументом будет merge
"если коммит является слиянием или существует файл .git/MERGE_MSG
". Ненулевое состояние выхода приведет к прерыванию фиксации.
Я не думаю, что это сработает с ускоренным слиянием, так как сообщение о коммите не будет.
Больше информации о крюках: https://www.kernel.org/pub/software/scm/git/docs/githooks.html#_prepare_commit_msg
Ответ 2
В Git 2.24 (Q4 2019) нет необходимости в обертке скрипта или перехвате подготовки сообщения.
Добавлен новый хук "pre-merge-commi t".
Смотрите коммит bc40ce4, коммит 6098817, коммит a1f3dd7 (07 августа 2019 г.) от Майкла Дж. Грубера (mjg
).
.
См. коммит f78f6c7 (07 августа 2019 г.) Джоша Стедмона (steadmon
).
(Merged by Junio C Hamano -- [TG42] -- in commit f76bd8c, 18 Sep 2019)
git-merge
: честьpre-merge-commit
git-merge
не выполняет хук перед фиксацией при автоматическом слиянии коммиты, и по соображениям совместимости это останется.Введите хук
pre-merge-commit
, который вызывается для автоматического слияния Коммит, как и pre-commit, вызывается для неавтоматического коммита слияния (или любой другой коммит).
документация теперь включает в себя:
до слияния фиксации
Этот хук вызывается
git-merge
.
Он не принимает никаких параметров и вызывается после того, как слияние было успешно выполнено, и до получения предложенного сообщения журнала фиксации для совершения фиксации.
Выход из этого сценария с ненулевым состоянием приводит к прерыванию командыgit merge
перед созданием фиксации.The default 'pre-merge-commit' hook, when enabled, runs the 'pre-commit' hook, if the latter is enabled.
Этот хук вызывается с переменной среды
GIT_EDITOR=:
, если команда не вызовет редактор для изменения сообщения фиксации.Если слияние не может быть выполнено автоматически, конфликты необходимо разрешить, а результат зафиксировать отдельно (см.
git-merge
).
В этот момент этот хук не будет выполнен, но хук "pre-commit
", если он включен.
Ответ 3
Другим хорошим решением будет добавить сценарий оболочки, называть его так, как вы хотите, затем добавьте эти строки в скрипт:
git() {
if [ "$1" == "merge" ]; then
echo "seems to work like a charme"
fi
command git "[email protected]"
}
git "[email protected]"
Затем сделайте
alias git="./my-pre-merge-script.sh"
Тогда тебе пора. Вы только что добавили свой собственный крюк перед слиянием. Я знаю, что у вас нет доступа ни к каким аргументам, которые git передал бы к реальной ловушке перед слиянием, но вы можете подготовить файлы или все, что вы хотите подготовить к слиянию сейчас; Я лично очень доволен этим подходом: я потратил 2 или 3 целых дня, чтобы найти что-то для предварительного слияния, а затем мне пришлось использовать pre-commit-msg, который я не нашел достаточно точным для своих нужд. Это решает все мои проблемы. Надеюсь, это поможет кому-нибудь в будущем.