Ubuntu使用commitizen执行cz commit报pathspec不匹配错误解决
错误原因
- 终端未识别到commitizen提供的
cz命令:npm全局安装包的可执行目录如果没有被加入系统PATH环境变量,终端无法命中commitizen安装的cz、git-cz程序。此时如果shell存在git相关别名、或系统预装了其他同名cz工具,输入的cz commit会被直接解析为git指令调用,由于git找不到对应子命令,会将后续传入的commit识别为待操作的文件路径,最终抛出pathspec匹配错误。 - 指令语法错误:commitizen的提交流程不需要额外传入
commit参数,即使命令路径配置正确,多余的commit参数也会导致参数解析异常,透传给git后触发路径匹配错误。 - 缺失提交规范适配器:commitizen仅提供交互提交的框架能力,必须搭配对应规范适配器(如
cz-conventional-changelog)才能正常启动交互流程,未安装适配器时cz指令会直接透传所有参数给git,触发同类报错。
修复步骤
- 配置npm全局可执行路径到系统环境变量
执行以下命令查看npm全局安装前缀:
根据输出的路径,将对应npm config get prefixbin目录加入shell配置:若使用系统默认bash,编辑~/.bashrc;若使用zsh,编辑~/.zshrc,在文件末尾添加如下内容:
保存文件后执行export PATH="$(npm config get prefix)/bin:$PATH"source ~/.bashrc(对应你修改的配置文件)让配置立即生效。 - 安装全局提交规范适配器并配置
执行命令安装通用的Angular提交规范适配器:
在用户根目录创建cz配置文件,指定全局默认使用的适配器:npm install -g cz-conventional-changelogecho '{ "path": "cz-conventional-changelog" }' > ~/.czrc - 使用正确命令执行提交
进入目标Git仓库目录,不需要添加commit参数,直接执行以下命令即可唤起commitizen交互提交界面:
也可以直接执行git czcz启动提交流程,禁止额外追加commit参数。 - 排查命令冲突(若上述操作后仍报错)
执行以下命令查看当前cz命令的实际来源:
如果输出路径不在npm全局bin目录下,说明存在命令别名冲突,打开shell配置文件删除所有和which czcz相关的alias配置,重新加载shell配置即可。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

