【问题标题】:how to make commitizen override default git commit command如何使 commitizen 覆盖默认的 git commit 命令
【发布时间】:2018-05-22 00:05:25
【问题描述】:

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

我该怎么做?我google了,找不到可行的解决方案。

谢谢

【问题讨论】:

  • 预提交挂钩对您有用吗? git-scm.com/docs/githooks#_pre_commit
  • @VonC 试过了,pre-commit 钩子不会终止原来的 git 提交,而是继续它,甚至弹出了commitizen,所以即使它运行了也无法使用commitizen...想?
  • 一个提交后挂钩,然后?
  • @VonC nop,这将执行提交
  • > 但继续它,甚至弹出了commitizen。如果 commitizen 失败(exit statis -1,预提交应该阻止提交。

标签: git npm commit git-commit commitizen


【解决方案1】:

这实际上是可能的。根据official docs,这是可以使用husky实现的

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

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

【讨论】:

    【解决方案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中的警告:

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

    我会推荐yarn cz/npm run cz

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多