目录
文件或目录
通配符
方括号表达式
魔法签名
top
icase
literal
glob
attr
exclude
组合签名
首页 web前端 css教程 git Pathspecs以及如何使用它们

git Pathspecs以及如何使用它们

Apr 16, 2025 am 11:53 AM

Git Pathspecs and How to Use Them

Git 命令中的<pathspec></pathspec>参数:灵活运用Git 的强大功能

在查阅Git 命令文档时,你可能会注意到许多命令都包含<pathspec></pathspec>选项。起初,你可能认为这只是“路径”的一种技术说法,只能接受目录和文件名。然而,深入了解后你会发现,Git 命令中的<pathspec></pathspec>远比你想象的强大。

<pathspec></pathspec>是Git 用于限制Git 命令作用范围的机制,它将命令的执行范围限定在仓库的子集。即使你没有意识到,你可能已经在使用<pathspec></pathspec>了。例如,在命令git add README.md中,<pathspec></pathspec>就是README.md 。但<pathspec></pathspec>能够实现更精细、更灵活的操作。

学习<pathspec></pathspec>的好处在于,它能显着增强许多Git 命令的功能。例如,使用git add ,你可以只添加单个目录中的文件;使用git diff ,你可以检查仅对扩展名为.scss的文件名所做的更改;你还可以使用git grep搜索所有文件,但排除/dist目录中的文件。

此外,<pathspec></pathspec>有助于编写更通用的Git 别名。例如,我有一个名为git todo的别名,它将搜索我所有存储库文件中的字符串“todo”。但是,我希望它显示字符串的所有实例,即使它们不在我的当前工作目录中。使用<pathspec></pathspec>,我们可以实现这一点。

文件或目录

使用<pathspec></pathspec>最直接的方法是使用目录和/或文件名。例如,使用git add ,你可以执行以下操作: .src/README分别是每个命令的<pathspec></pathspec>

 git add . # 添加当前工作目录(CWD)
git add src/ # 添加src/ 目录git add README # 只添加README 文件
登录后复制

你也可以向一个命令添加多个<pathspec></pathspec>

 git add src/ server/ # 添加src/ 和server/ 目录
登录后复制

有时,你可能会看到命令的<pathspec></pathspec>前面有一个-- 。这是用来消除<pathspec></pathspec>和命令其他部分之间歧义的。

通配符

除了文件和目录外,你还可以使用*?[]来匹配模式。 *符号用作通配符,它将匹配路径中的/ —— 换句话说,它将搜索子目录。

 git log '*.js' # 记录CWD 和子目录中的所有.js 文件git log '.*' # 记录CWD 中所有“隐藏”文件和目录git log '*/.*' # 记录子目录中所有“隐藏”文件和目录
登录后复制

引号非常重要,尤其是在使用*时。它们可以防止你的shell(例如bash 或ZSH)自行扩展通配符。例如,让我们看看git ls-files如何在使用和不使用引号的情况下列出文件。

 # 示例目录结构#
# .
# ├── package-lock.json
# ├── package.json
# └── data
# ├── bar.json
# ├── baz.json
# └── foo.json

git ls-files *.json

# package-lock.json
# package.json

git ls-files '*.json'

# data/bar.json
# data/baz.json
# data/foo.json
# package-lock.json
# package.json
登录后复制

由于shell 在第一个命令中扩展了*git ls-files收到的命令是git ls-files package-lock.json package.json 。引号确保Git 是扩展通配符的一方。

你还可以使用?字符作为单个字符的通配符。例如,要匹配mp3 或mp4 文件,你可以执行以下操作。

 git ls-files '*.mp?'
登录后复制

方括号表达式

你还可以使用“方括号表达式”来匹配集合中的单个字符。例如,如果你想匹配TypeScript 或JavaScript 文件,可以使用[tj] 。这将匹配tj

 git ls-files '*.[tj]s'
登录后复制

这将匹配.ts文件或.js文件。除了使用字符外,还可以引用方括号表达式中某些字符集合。例如,你可以在方括号表达式中使用[:digit:]来匹配任何十进制数字,或者使用[:space:]来匹配任何空格字符。

 git ls-files '*.mp[[:digit:]]' # mp0, mp1, mp2, mp3, ..., mp9
git ls-files '*[[:space:]]*' # 匹配包含空格的任何路径
登录后复制

要了解更多关于方括号表达式及其使用方法的信息,请查看GNU 手册。

魔法签名

<pathspec></pathspec>还拥有名为“魔法签名”的特殊工具,它可以为你的<pathspec></pathspec>解锁一些额外的功能。这些“魔法签名”是通过在<pathspec></pathspec>的开头使用:(signature)来调用的。如果不明白,别担心:一些例子应该会有所帮助。

top

top签名告诉Git 从Git 仓库的根目录而不是当前工作目录匹配模式。你也可以使用简写/而不是:(top)

 git ls-files ':(top)*.js'
git ls-files ':/*.js' # 简写
登录后复制

这将列出仓库中所有扩展名为.js的文件。使用top签名,这可以在仓库中的任何子目录中调用。我发现这在编写通用的Git 别名时特别有用!

 git config --global alias.js 'ls-files -- ':(top)*.js''
登录后复制

你可以使用git js在你的仓库中的任何位置获取项目中所有JavaScript 文件的列表。

icase

icase签名告诉Git 在匹配时忽略大小写。如果你不关心文件名的大小写,这将非常有用——例如,这对于匹配jpg 文件非常有用,jpg 文件有时使用大写扩展名JPG。

 git ls-files ':(icase)*.jpg'
登录后复制

literal

literal签名告诉Git 按字面意思对待所有字符。如果你想将*?等字符作为其本身而不是通配符来对待,则可以使用此选项。除非你的仓库的文件名包含*? ,否则我不认为这个签名会被经常使用。

 git log ':(literal)*.js' # 返回文件'*.js' 的日志
登录后复制

glob

当我开始学习<pathspec></pathspec>时,我注意到通配符的工作方式与我习惯的不同。通常,我看到单个星号*作为不匹配目录中任何内容的通配符,而连续星号( ** ) 作为“深度”通配符,匹配目录中的名称。如果你更喜欢这种风格的通配符,你可以使用glob魔法签名!

如果你想更精细地控制搜索项目目录结构的方式,这将非常有用。例如,让我们看看这两个git ls-files如何搜索React 项目。

 git ls-files ':(glob)src/components/*/*.jsx' # “顶级”jsx 组件git ls-files ':(glob)src/components/**/*.jsx' # “所有”jsx 组件
登录后复制

attr

Git 能够为特定文件设置“属性”。你可以使用.gitattributes文件设置这些属性。

 <code># .gitattributes src/components/vendor/* vendored # 设置“vendored”属性src/styles/vendor/* vendored</code>
登录后复制

使用attr魔法签名可以为你的<pathspec></pathspec>设置属性要求。例如,我们可能希望忽略来自供应商的上述文件。

 git ls-files ':(attr:!vendored)*.js' # 搜索非vendored 的js 文件git ls-files ':(attr:vendored)*.js' # 搜索vendored 的js 文件
登录后复制

exclude

最后,是“ exclude ”魔法签名(简写为:!:^ )。此签名的工作方式与其他魔法签名不同。在解析所有其他<pathspec></pathspec>后,将解析所有带有exclude签名的<pathspec></pathspec>,然后将其移除返回的路径。例如,你可以搜索所有.js文件,同时排除.spec.js测试文件。

 git grep 'foo' -- '*.js' ':(exclude)*.spec.js' # 搜索.js 文件,排除.spec.js
git grep 'foo' -- '*.js' ':!*.spec.js' . # 与上述相同的简写
登录后复制

组合签名

没有什么可以限制你在单个<pathspec></pathspec>中使用多个魔法签名!你可以在括号内用逗号分隔你的魔法词来使用多个签名。例如,如果你想从仓库的底部(使用top )、不区分大小写(使用icase )、仅使用已创作的代码(使用attr忽略供应商文件)以及使用glob 风格的通配符(使用glob )进行匹配,则可以执行以下操作。

 git ls-files -- ':(top,icase,glob,attr:!vendored)src/components/*/*.jsx'
登录后复制

你无法组合的两个魔法签名是globliteral ,因为它们都会影响Git 处理通配符的方式。这在Git 词汇表中提到,也许是我在任何文档中读到的最喜欢的句子。

Glob 魔法与literal 魔法不兼容。

<pathspec></pathspec>是许多Git 命令的一个组成部分,但其灵活性并非立即可见。通过学习如何使用通配符和魔法签名,你可以成倍地提高你在Git 命令行上的能力。

以上是git Pathspecs以及如何使用它们的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue团队完成了完成,我知道这是一项巨大的努力,而且很长时间。所有新文档也是如此。

您可以从浏览器获得有效的CSS属性值吗? 您可以从浏览器获得有效的CSS属性值吗? Apr 02, 2025 pm 06:17 PM

我有人写了这个非常合法的问题。 Lea只是在博客上介绍了如何从浏览器中获得有效的CSS属性。那样的是这样。

在CI/CD上有点 在CI/CD上有点 Apr 02, 2025 pm 06:21 PM

我说的“网站”比“移动应用程序”更合适,但我喜欢Max Lynch的框架:

带有粘性定位的堆叠卡和一点点的杂物 带有粘性定位的堆叠卡和一点点的杂物 Apr 03, 2025 am 10:30 AM

前几天,我发现了科里·金尼文(Corey Ginnivan)网站上的这一点,当您滚动时,彼此之间的卡片堆放集。

在WordPress块编辑器中使用Markdown和本地化 在WordPress块编辑器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我们需要直接在WordPress编辑器中向用户显示文档,那么最佳方法是什么?

比较浏览器的响应式设计 比较浏览器的响应式设计 Apr 02, 2025 pm 06:25 PM

这些桌面应用程序中有许多目标是同时在不同的维度上显示您的网站。因此,例如,您可以写作

如何将CSS网格用于粘头和页脚 如何将CSS网格用于粘头和页脚 Apr 02, 2025 pm 06:29 PM

CSS网格是一系列属性的集合,旨在使布局比以往任何时候都容易。像任何东西一样,那里有一点学习曲线,但是网格是

Google字体可变字体 Google字体可变字体 Apr 09, 2025 am 10:42 AM

我看到Google字体推出了新设计(Tweet)。与上一次大型重新设计相比,这感觉更加迭代。我几乎无法分辨出区别

See all articles