Git是否支持路径中的通配符?

36

我已经查找、搜索和阅读文档,但实际上找不到任何关于这个的内容。

基本上,我想能够做到这一点:

git reset -- *.exe
或者
git reset -- */some_executable.exe

不要这样做:

git reset -- some/very/long/path/some_executable.exe

同时能够做到这一点也会很不错:

git reset -- topleveldirectory/another/subdirectory/*

不要这样做:

git reset -- topleveldirectory/another/subdirectory/SomeFile.cpp
git reset -- topleveldirectory/another/subdirectory/SomFile.h

我认为我可以使用通配符*在git-add命令中添加文件,但是在上述情况下没有找到任何有效的方法。

有什么建议或者指向更多信息的指针吗?

使用的版本:git版本1.7.3.1.msysgit.0,运行在64位Windows 7上。

5个回答

21

Git支持一些路径规范的通配符,但是你需要小心谨慎地转义这些字符,以避免在你的情况下被解释为更复杂的通配符扩展,例如msys bash不支持。

编辑:此外,在您的重置示例中,您可以将目录作为参数传递给git reset,并且git将递归操作。

git reset my/long/path

优于

git reset my/long/path/*

2
嘿,这根本不起作用! 我有很多Java文件,运行 git log --all -- '*.java'什么也没有产生。find . -name '*.java'则输出了大量内容。 - misiu_mp
这是在Linux上的Git 1.7.4.4。 - misiu_mp
那个版本一定是有问题的。1.7.9.3版本的构建按照描述工作。我也不知道为什么。 - misiu_mp
1
如果您想通过所有的Java文件,请尝试执行以下命令:git reset -- \*.java - Lars Juel Jensen

18

要在 git 文件夹内递归地重置所有 exe 文件,您可以执行以下操作:

git reset -- \*.exe

或者,如果您想添加特定子文件夹中的所有Java文件,也可以这样做,像这样:

git add ./some/sub/folder/path/**/*.java

其中 ** 表示从路径中的此点开始,递归地包括所有文件夹。


10

然而,在某些情况下,我们确实需要以特定的方式使用通配符来定位特定子集的文件,而不仅仅是所有文件,尤其是在使用 git rmgit checkoutgit reset 时。你可以通过简单地转义通配符字符来实现相同的效果。

git rm app/assets/javascript/templates/projects/\*.jst.ejs

4
至少在子文件夹/子文件的情况下,不需要使用通配符。
git add .

...将当前目录(.)及其下所有内容添加进去。同样适用于...

git add files/

...这将添加./files./files/foo.txt./files/foo/bar.txt


0
git diff '*word*'

在iTerm / zsh中对我有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接