搜索
首页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
Flexbox vs Grid:我应该学习两者吗?Flexbox vs Grid:我应该学习两者吗?May 10, 2025 am 12:01 AM

是的,youshouldlearnbothflexboxandgrid.1)flexboxisidealforone-demensional,flexiblelayoutslikenavigationmenus.2)gridexcelstcelsintwo-dimensional,confffferDesignssignssuchasmagagazineLayouts.3)blosebothenHancesSunHanceSlineHancesLayOutflexibilitibilitibilitibilitibilityAnderibilitibilityAndresponScormentilial anderingStruction

轨道力学(或我如何优化CSS KeyFrames动画)轨道力学(或我如何优化CSS KeyFrames动画)May 09, 2025 am 09:57 AM

重构自己的代码看起来是什么样的?约翰·瑞亚(John Rhea)挑选了他写的一个旧的CSS动画,并介绍了优化它的思维过程。

CSS动画:很难创建它们吗?CSS动画:很难创建它们吗?May 09, 2025 am 12:03 AM

CSSanimationsarenotinherentlyhardbutrequirepracticeandunderstandingofCSSpropertiesandtimingfunctions.1)Startwithsimpleanimationslikescalingabuttononhoverusingkeyframes.2)Useeasingfunctionslikecubic-bezierfornaturaleffects,suchasabounceanimation.3)For

@KeyFrames CSS:最常用的技巧@KeyFrames CSS:最常用的技巧May 08, 2025 am 12:13 AM

@keyframesispopularduetoitsversatoryand and powerincreatingsmoothcssanimations.keytricksinclude:1)definingsmoothtransitionsbetnestates,2)使用AnimatingmatematingmultationmatingMultationPropertiessimultane,3)使用使用4)使用BombingeNtibalibility,4)使用BombingingWithjavofofofofofoffo

CSS计数器:自动编号的综合指南CSS计数器:自动编号的综合指南May 07, 2025 pm 03:45 PM

CSSCOUNTERSAREDOMANAGEAUTOMANAMBERINGINWEBDESIGNS.1)他们可以使用forterablesofcontents,ListItems,and customnumbering.2)AdvancedsincludenestednumberingSystems.3)挑战挑战InclassINCludeBrowsEccerCerceribaliblesibility andperformiballibility andperformissises.4)创造性

使用卷轴驱动动画的现代滚动阴影使用卷轴驱动动画的现代滚动阴影May 07, 2025 am 10:34 AM

使用滚动阴影,尤其是对于移动设备,是克里斯以前涵盖的一个微妙的UX。杰夫(Geoff)涵盖了一种使用动画限制属性的新方法。这是另一种方式。

重新访问图像图重新访问图像图May 07, 2025 am 09:40 AM

让我们快速进修。图像地图一直返回到HTML 3.2,首先是服务器端地图,然后使用映射和区域元素通过图像上的单击区域定义了可单击区域。

DEV状态:每个开发人员的调查DEV状态:每个开发人员的调查May 07, 2025 am 09:30 AM

开发委员会调查现已开始参与,并且与以前的调查不同,它涵盖了除法:职业,工作场所,以及健康,爱好等。 

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脱衣机

Video Face Swap

Video Face Swap

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

热工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

安全考试浏览器

安全考试浏览器

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF

mPDF

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

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。