执行`git merge`命令时有没有办法绕过post-merge git hook

Is there a way to bypass post-merge git hook when executing `git merge` command

我配置了 post-merge 挂钩,以便(半手动)与另一个版本控制系统集成。但是有时我想避免来自 运行 的钩子有没有办法绕过 git merge?

我知道 git commit--no-verify 命令行参数。这种解决方案非常适合我的用例,但似乎 --no-verify 不适用于 git commit 命令。

没有禁用 运行ing post-合并挂钩的标志,但是您可以轻松地装配自己的 post-合并挂钩(您可以完全控制它,因为它是在您自己的存储库中)以遵守环境变量。例如,shell 脚本可能以:

开头
#! /bin/sh
warn() {
    echo "warning: " 1>&2
}
case ${SKIP_POST_MERGE_HOOK:-no} in
yes) exit 0;;
no) ;;
*) warn "mystery value ${SKIP_POST_MERGE_HOOK} for SKIP_POST_MERGE_HOOK";;
esac
... rest of code as usual ...

现在,如果您想 运行 git merge 但绕过钩子(或 运行 类似 git pull 方便脚本的东西 运行s git merge 为您),只需将持续时间设置为 SKIP_POST_MERGE_HOOK=yes

$ SKIP_POST_MERGE_HOOK=yes git merge ...

对于那些因为 git merge --no-verify --continue 不能一起工作而来到这里的人 - 你可以暂时禁用挂钩以进行合并 - 例如对于我当前的 React 项目,我刚刚从我的 package.json 中删除了这部分 - 因为文件没有暂存,所以它不会进入合并提交

  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.{js,ts,tsx}": [
      "eslint --fix --rule '@typescript-eslint/no-non-null-assertion: error'",
      "prettier --write"
    ],
    "*.css": [
      "stylelint --fix",
      "prettier --write"
    ],
    "*.{json,yml,md,eslintrc,stylelintrc,babelrc}": [
      "prettier --write"
    ]
  },