4

我目前正在创建自定义脚本来运行commitizen commit命令,npm run commit但我想让它git commitnpm run commit某种方式覆盖默认值.....所以任何人git commit都会自动将人引导到commitizen界面并忽略该人之后放置的任何内容git commit当 commitizen 可用时。

我怎样才能做到这一点?我谷歌了,找不到可行的解决方案。

谢谢

4

2 回答 2

3

无法通过 git 本身覆盖默认的 git 命令,但您可以将以下内容放入您的.bashrc:

function git() {
    case $* in
        commit* ) npm run commit ;; # or yarn commit
        * ) command git "$@" ;;
    esac
}

如果第二个参数是“commit”,这将覆盖 git 命令,如果不是,则使用普通的 git 命令。(command确保我们不会递归地使用我们的函数——它将直接转到 git 可执行文件,而不是返回到我们定义的函数。)

有关更多信息,请参见此处的答案

请注意commitizen 文档中的警告:

注意:如果由于 husky 之类的原因而使用 precommit 钩子,则需要将脚本命名为“commit”以外的其他名称(例如“cm”:“git-cz”)。原因是 npm-scripts 有一个“功能”,它会自动运行名称为 prexxx 的脚本,其中 xxx 是另一个脚本的名称。本质上,如果您将脚本命名为“commit”,npm 和 husky 将运行“precommit”脚本两次,而解决方法是防止 npm 触发的 precommit 脚本。

我建议yarn cz/npm run cz代替。

于 2018-04-27T18:49:46.550 回答
1

这实际上是可能的。根据官方文档,这可以使用husky来实现

"husky": {
  "hooks": {
    "prepare-commit-msg": "exec < /dev/tty && git cz --hook || true",
  }
}

这也是同一个文档的一部分:)

于 2020-12-03T19:21:05.007 回答