git:如何以递归方式添加与glob模式匹配的目录子树中的所有文件?

时间:2010-02-08 12:07:11

标签: git glob git-add

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

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

fatal: pathspec 'documentation/\*.screen' did not match any files

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

6 个答案:

答案 0 :(得分:59)

这是文档中的错误。用

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

$ git add 'documentation/*.screen'

获得您想要的行为。

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

$ git add *.screen

更新:我提交了patch来解决问题,now fixed自版本1.6.6.2起。

答案 1 :(得分:17)

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

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

// git-add的-u选项只为以前跟踪和修改的文件添加索引

答案 2 :(得分:4)

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

答案 3 :(得分:4)

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

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

对于原始问题,命令将是:

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

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

答案 4 :(得分:1)

git add ./documentation/*.screen

答案 5 :(得分:1)

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