Подтвердить что ты не робот

Как мне написать предварительный слияние в Git?

В этом вопросе говорится все. Есть ли способ выполнить действие перед слиянием? Я предполагаю, что есть способ использовать крюк pre-commit, но я не совсем уверен.

4b9b3361

Ответ 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, который я не нашел достаточно точным для своих нужд. Это решает все мои проблемы. Надеюсь, это поможет кому-нибудь в будущем.