在 git 中使用 glob 模式暂存除特定文件之外的所有文件

staging all files except specific files using glob patterns in git

我正在尝试使用 git add 命令将一些新创建的文件和其他一些已编辑的文件暂存到我在 git 的暂存区。我真正想要的是 暂存除 *.java 文件之外的所有内容(在我的 当前目录 每个子目录 在我的项目中)。我试图完成这项工作,但没有成功。

密码:/d/myProject

这些都不起作用:

git add !(*.java)
git add \!\(\*.java\)
git add \!\(*.java\)
git add !\(\*.java\)

有人可以帮我完成这项工作吗? 是否可以在这里使用正则表达式而不是 glob?

您可以使用 find:

find . -type f ! -iname '*.java' -exec git add {} +

您还可以使用 ! -ipath <pattern> 跳过匹配模式的路径,例如:

find . -type f ! -iname '*.java' ! -ipath './a/b/*c*' -exec git add {} +

这实际上取决于 shell 的 glob 设置。为了获得更独立于系统的行为,您可以做的是使用 find:

find . -not -iname '*.java' -exec git add '{}' \+