You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行shell脚本中git add *命令报错fatal: pathspec '*?'未匹配文件,如何解决?

解决git add *报错fatal: pathspec '*?' did not match any files的问题

你的问题主要来自两个核心原因:脚本换行符格式不兼容和**git add *的通配符解析局限性**,我来一步步帮你搞定:

一、错误原因拆解

  1. 换行符不兼容:从错误信息里的*?和最后出现的' is not a git command能看出来,你的push.sh应该是在Windows编辑器里保存的,用了Windows风格的CRLF(\r\n)换行符。在WSL/Linux环境下,shell会把\r当成命令的一部分,导致git add *被解析成git add *?,git push也被附加了无效字符,引发命令识别错误。
  2. git add *的隐患:*是shell层面的通配符,会被shell先解析再传给Git,不仅可能漏掉隐藏文件,遇到特殊文件名时还容易出现解析异常。

二、具体解决步骤

1. 修复脚本的换行符格式

把脚本的CRLF换行转换成Linux兼容的LF换行:

  • 如果你的环境有dos2unix工具,直接执行:
    dos2unix push.sh
    
  • 如果没有dos2unix,用sed命令手动替换:
    sed -i 's/\r$//' push.sh
    

2. 替换git add *为更可靠的命令

推荐用git add --all(或简写git add -A)替代git add *,它会让Git自己处理所有变更(包括新增、修改、删除的文件),比shell通配符更稳定且覆盖范围全面。你也可以用git add .,但--all能处理更多场景(比如已跟踪文件的删除)。

修改后的push.sh建议加上shell指定头,避免环境差异:

#!/bin/bash
git add --all
git commit -m "Push everything from Laptop"
git push

3. 验证与调试

修改完后重新执行脚本:

./push.sh

如果还是有问题,可以在脚本开头加上set -x开启调试模式,这样会输出每一步实际执行的命令,方便定位问题:

#!/bin/bash
set -x
git add --all
git commit -m "Push everything from Laptop"
git push

内容的提问来源于stack exchange,提问作者Chetu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:24:06