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

时间:2011-02-16 03:01:50

标签: git msysgit

我查看,搜索过并阅读过文档,但却无法真正找到相关内容。

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

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中使用通配符*来添加文件,但是找不到任何适用于上述情况的内容。

我可以在哪里寻找更多信息的建议或指示?

在64位Windows 7上使用:git version 1.7.3.1.msysgit.0

4 个答案:

答案 0 :(得分:18)

Git确实支持一些pathspec globbing,但是你需要小心shell-escape字符,这样在你的情况下就不会解释它们,msys bash,它不支持更复杂的通配符扩展。

编辑:另外,对于你的重置示例,你可以将目录作为参数传递给git reset,git将以递归方式运行。

git reset my/long/path

而不是

git reset my/long/path/*

答案 1 :(得分:8)

但是,在某些情况下,确实需要以特定方式使用通配符来定位特定文件子集而不仅仅是所有文件,尤其是在使用git rmgit checkout或{{ 1}}。只需转义外卡字符即可实现相同目的。

git reset

答案 2 :(得分:6)

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

git reset -- \*.exe

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

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

其中**表示路径

中此点的所有文件夹递归

答案 3 :(得分:4)

至少在子文件夹/子文件的情况下,不需要通配符。

git add .

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

git add files/

...会添加./files./files/foo.txt./files/foo/bar.txt