如何使commitizen覆盖默认的git commit命令

时间:2017-12-07 19:39:09

标签: git npm commit git-commit commitizen

我正在创建自定义脚本以执行npm run commit运行commitizen commit命令,但我想让它以git commit以某种方式使用默认npm run commit .....所以git commit任何人都会自动将此人引导至提交界面,并忽略此人在git commit提交任何内容后放置的内容。

我该怎么做?我做谷歌,无法找到可行的解决方案。

由于

2 个答案:

答案 0 :(得分:2)

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

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

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

有关详细信息,请参阅此处this answer

请注意commitizen docs中的警告:

  

注意:如果你使用像哈士奇这样的预先挂钩,你需要为脚本命名除“commit”之外的其他东西(例如“cm”:“git-cz”)。原因是因为npm-scripts有一个“功能”,它自动运行名称为prexxx的脚本,其中xxx是另一个脚本的名称。实质上,如果您将脚本命名为“commit”,则npm和husky将运行两次“precommit”脚本,并且解决方法是阻止npm触发的precommit脚本。

我建议改为yarn cz / npm run cz

答案 1 :(得分:0)

这实际上是可能的。根据{{​​3}},这可以使用official docs

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

在同一文档中也有一些陷阱:)