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

时间:2016-03-20 01:58:05

标签: git bash wildcard

我正在尝试使用wilcards执行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

我希望,有人可以帮助我!

2 个答案:

答案 0 :(得分:1)

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

  • bash在它到达git之前展开它(由于错误消息中的“core-*-SNAPSHOT.jar”,它没有 - 在您的特定情况下 - 因为它没有不匹配您所在目录中的任何内容。引用参数以防止这种情况:git rm "$artname-*-$buildtype"
  • 您感兴趣的文件未跟踪(git的搜索行为就好像它们不存在一样)
  • -r需要使用前导目录名(文档说明了这一点,但使用git 2.7.4的简单测试表明它实际上并非如此)

答案 1 :(得分:1)

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

git ls-files $artname-*-$buildtype | tr '\n' '\0' | xargs -0 -L1 -I '$' git rm -r -f '$'
相关问题