git - git 等同于 p 4's "...”模式是什么?

标签 git

当我使用 p4 (Perforce) 时,我经常使用“...”模式,它有点像“*”,除了它遍历文件系统层次结构的级别(即:它也匹配斜线)。这对于处理目录树下几层的源文件很方便。

例如:

p4 diff foo/.../*.py

这将“p4 diff”子树“foo”下的所有 Python 文件。

有没有一种简单的方法可以用 git 得到相同的结果?现在我必须做这样的事情:

git diff $(find foo -name '*.py')

这几乎没有那么方便。

最佳答案

git 通常依赖于 shell 提供的路径名扩展功能——这是理所当然的,因为路径名扩展并不完全是版本控制系统的工作。因此,您应该查看您选择的 shell,看看它是否支持类似 ... 路径名扩展的东西。如果您使用的是 bash,则可以设置 globstar 选项

shopt -s globstar

然后你可以使用双星号来得到你想要的扩展:

git diff foo/**/*.py

请注意,根据我的测试,双星号似乎与部分路径名组件不匹配。换句话说,它的后面和前面必须有一个斜线,该模式才能匹配 foo/bar/blah/baz.py 之类的内容。如果您尝试编写 foo/ba**/*.py,它将匹配与 foo/ba*/*.py 相同的内容。

关于git - git 等同于 p 4's "...”模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087510/

相关文章:

github 远程标签推送无需克隆 repo

git - 错误 "Fatal: Could not read from remote repository"git push - ssh key

git - 你如何管理大型 git 存储库?

git - 如何将分支与 BitBucket 中的问题联系起来?

node.js - 在 Azure 上部署 Hexo.. 不知道我错过了什么

Ubuntu 12.04 上的 Git 克隆 XAMPP

git 忽略包含 <pattern to ignore> 的文件名

git - 克隆 Azure git 存储库报告 "could not resolve host"

git - 我怎样才能 stash 我的更改并返回到我上次在 Git 中 checkin 的状态?

git - 如何在不修改 git 历史记录的情况下对源代码运行代码格式化程序?