【问题标题】:Git rm with wildcard doesn't find existing files带有通配符的 Git rm 找不到现有文件
【发布时间】:2016-03-20 01:58:05
【问题描述】:

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

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 只能处理本地文件中的文件(直接,即)。

标签: git bash wildcard


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-30
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多