当我使用p4(Perforce)时,我会经常使用“...”模式,它有点像“*”,除了它遍历文件系统层次结构的级别(即:它也匹配斜杠)。这对于处理目录树中几个级别的源文件很方便。
例如:
p4 diff foo/.../*.py
这将“p4 diff”子树“foo”下的所有Python文件。
有没有一种简单的方法可以用git获得相同的结果?现在我必须做这样的事情:
git diff $(find foo -name '*.py')
这不太方便。
答案 0 :(得分:4)
git通常依赖于shell提供的路径名扩展功能 - 这是正确的,因为路径名扩展并不完全是版本控制系统的工作。因此,您应该查看自己选择的shell,看看它是否支持类似...
路径名扩展的内容。如果您使用的是bash,则可以设置globstar
选项
shopt -s globstar
然后您可以使用双星号来获得所需的扩展:
git diff foo/**/*.py
请注意,根据我的测试,双星号似乎与部分路径名组件不匹配。换句话说,它必须在该模式的斜杠之后并且之后加上匹配foo/bar/blah/baz.py
之类的斜杠。如果您尝试撰写foo/ba**/*.py
,它将与foo/ba*/*.py
匹配相同的内容。