搜索
首页web前端css教程git Pathspecs以及如何使用它们

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
使用SASS创建可维护的图标系统使用SASS创建可维护的图标系统Apr 17, 2025 am 09:36 AM

我最喜欢将图标添加到网站的方法之一是将它们作为数据URL背景图像包括在我的CSS中的伪元素(例如:: After)。这

网站应该在没有JavaScript的情况下工作吗?网站应该在没有JavaScript的情况下工作吗?Apr 17, 2025 am 09:27 AM

JS派对播客只是一个有趣的一集,他们通过分为两组两组来辩论这个经典问题。每个小组都被分配了

可访问性和网络性能不是功能,它们是基线可访问性和网络性能不是功能,它们是基线Apr 17, 2025 am 09:21 AM

本周,我一直在沉思网络性能和可访问性。一切始于伊桑·马科特(Ethan Marcotte)关于可访问性的好笔记

具有Netlify和Anymod的快速静态站点具有Netlify和Anymod的快速静态站点Apr 17, 2025 am 09:16 AM

在大约10分钟内,我们&#039; ll设置了一个工作流程,使静态站点变得简单。

'关闭主线程”'关闭主线程”Apr 17, 2025 am 09:14 AM

JavaScript就是他们所谓的“单线线程”。正如布莱恩·巴伯(Brian Barbour)所说:

可掩盖的图标:PWA的Android自适应图标可掩盖的图标:PWA的Android自适应图标Apr 17, 2025 am 09:13 AM

有一个新的Web功能,称为“蒙版”图标,即将推出Firefox Preview和其他Web浏览器。这种新的图标格式将使您的PWA在Android上具有自己的自适应图标。

'订阅播客”链接应在哪里?'订阅播客”链接应在哪里?Apr 16, 2025 pm 12:04 PM

有一段时间,iTunes是播客中的大狗,因此,如果您将“订阅播客”链接到喜欢:

浏览器引擎多样性浏览器引擎多样性Apr 16, 2025 pm 12:02 PM

当他们在2013年去Chrome时,我们失去了歌剧。与Edge今年早些时候也进行了同样的交易。迈克·泰勒(Mike Taylor)称这些变化为“减少

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

禅工作室 13.0.1

禅工作室 13.0.1

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

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),