【问题标题】:git: How do I recursively add all files in a directory subtree that match a glob pattern?git:如何递归地添加目录子树中与全局模式匹配的所有文件?
【发布时间】:2011-01-14 08:26:29
【问题描述】:

我在 /xxx/documentation 及其子目录中有几个 .screen 文件,这些文件已被 Git 跟踪。

在修改了许多屏幕文件后,我运行 git add documentation/\\*.screen(如 git-add 文档中的第一个示例所示)来暂存这些文件,但命令失败:

致命:pathspec 'documentation/\*.screen' 不匹配任何文件

是我的命令不好,还是 git 有错误?

【问题讨论】:

  • 标记的答案对我有用,但是应该注意,每个通配符都需要单独放在引号中,即git add ' *.cpp *.h' 导致上述错误fatal: pathspec ' *.cpp *.h' did not match any filesgit add ' *.cpp' '*.h' 完成了它的工作.

标签: git glob git-add


【解决方案1】:

这是文档中的错误。用

引用星号
$ git add 文档/\*.screen

$ git add 'documentation/*.screen'

得到你想要的行为。

如果您只想在当前目录中添加文件,请使用

$ git add *.screen

更新:我提交了一个 patch 来纠正这个问题,now fixed 从版本 1.6.6.2 开始。

【讨论】:

  • 这两个命令会导致相同的结果吗?只在当前目录中添加文件而不在其子目录中添加文件呢?
  • 顺便说一句,kubi 提到该命令在他的机器上运行良好,你说呢?
  • @Phuong 是的,这两个命令导致相同的结果。要仅在当前目录中添加文件,请不要引用参数(例如,git add *.screen)。我相信 kubi 和 Aaron 误解了您的问题,因为我很惊讶地得知(感谢您提示我!) git-add 具有此功能。
  • @alex 我很想知道导致它失败的具体情况。听起来上下文不同,足以保证我期待阅读一个单独的问题!
【解决方案2】:

我已经尝试了接受的答案,但它对我没有用..所以这是我的,以防万一有人想要完成它的工作而不花时间剖析可能导致问题的各个方面:

find documentation -name "*.screen" | xargs git add -u

//git-add 的 -u 选项仅将之前跟踪和修改的文件添加到索引中

【讨论】:

  • 在您的情况下,documentation 是存储库工作树内的目录名称还是从工作树外部到存储库顶层的相对路径?
【解决方案3】:

您告诉 shell 查找 *.screen(即,正是这个字符串 - 它不存在 - 而不是您想要的“所有以 .screen 结尾的文件)。省略 \\ 以便 shell 可以为你做文件名扩展。

【讨论】:

  • 在本手册中,他们告诉我添加双反斜杠kernel.org/pub/software/scm/git/docs/git-add.html。你说什么?
  • 我已经阅读了这个例子,我理解他们想要做什么(递归添加)但是,为什么命令会失败?该错误表明目录中没有扩展名为“.screen”的文件,或者该模式没有得到扩展。
  • 嗯,这很奇怪,因为当我删除双反斜杠时,命令不会产生错误。
【解决方案4】:

这是我刚刚用于 git 添加目录中所有文件的类似问题:

find . | sed "s/\(.*\)/\"\1\"/g" | xargs git add 

对于原始问题,命令是:

find -name "*.screen" | sed "s/\(.*\)/\"\1\"/g" | xargs git add 

请注意,我正在处理完全指定的文件名包含空格的情况。这就是为什么我的回答。编辑第一个| 之前的部分,以便挑选出不同的文件来添加。

【讨论】:

    【解决方案5】:

    git add *.java 对我有用,可以递归地添加所有 java 文件

    【讨论】:

    • 哇,它也对我有用!但前提是当前目录中没有 .java 文件。如果有,则仅添加这些文件。
    【解决方案6】:

    试试

    git add ./documentation/*.screen
    

    【讨论】:

    • 该命令不是只从./documentation添加文件,而不是从其子目录添加文件吗?
    • 你是对的。我刚刚在我的机器上尝试了你原来的命令,但它运行良好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多