Git 带通配符的 rm 找不到现有文件

Git rm with wildcard doesn't find existing files

我正在尝试使用通配符执行 git 删除。

git rm -r -f $artname-*-$buildtype

$artname 变量类似于 "core",$buildtype 类似于 "SNAPSHOT.jar"

因此,如果远程仓库中有一个名为 "core-1.0-SNAPSHOT" 的文件,则应使用通配符将其删除。

但这行不通。变量确实解析了,但通配符似乎不起作用。

这是我遇到的错误

fatal: pathspec 'core-*-SNAPSHOT.jar' did not match any files

希望有人能帮助我!

根据git-rm documentation,可能的原因可能是:

  • bash 在到达 git 之前扩展 glob(由于错误消息中的“core-*-SNAPSHOT.jar”,它没有 - 在您的特定情况下 - 因为它与您所在目录中的任何内容都不匹配)。引用论点来防止这种情况:git rm "$artname-*-$buildtype"
  • 您感兴趣的文件未被跟踪(git 的搜索行为就像它们不存在一样)
  • -r 需要前导目录名才能工作(文档是这么说的,但是对 git 2.7.4 的简单测试表明它实际上不是)

避免未跟踪和 .gitignored 文件的 oneliner 解决方案可能是:

git ls-files $artname-*-$buildtype | tr '\n' '[=10=]' | xargs -0 -L1 -I '$' git rm -r -f '$'