git:如何将所有与全局模式匹配的文件递归地添加到目录子树中?

我在git add documentation/\\*.screen及其子目录中有几个.screen文件,Git已经对其进行了跟踪。

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

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

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

Phương Nguyễn asked 2019-11-16T05:00:54Z
6个解决方案
59 votes

这是文档中的错误。 用星号引号

$ git add documentation/\*.screen

要么

$ git add 'documentation/*.screen'

得到你想要的行为。

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

$ git add *.screen

更新:我提交了一个可解决此问题的补丁,现已从1.6.6.2版本开始修复。

Greg Bacon answered 2019-11-16T05:01:40Z
17 votes

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

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

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

Flueras Bogdan answered 2019-11-16T05:02:14Z
4 votes

您告诉外壳程序查找*.screen(即,该字符串-不存在-而不是您想要的“所有以.screen结尾的文件”)。省略\\,以便外壳程序可以为您扩展文件名。

Aaron Digulla answered 2019-11-16T05:02:44Z
4 votes

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

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

对于原始问题,命令为:

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

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

Barnaby Dawson answered 2019-11-16T05:03:29Z
2 votes

git add * .java为我工作以递归方式添加所有java文件

Jackie answered 2019-11-16T05:03:54Z
1 votes

尝试

git add ./documentation/*.screen
kubi answered 2019-11-16T05:04:14Z
translate from https://stackoverflow.com:/questions/2221408/git-how-do-i-recursively-add-all-files-in-a-directory-subtree-that-match-a-glob