如何使用 .gitignore 文件
介绍
在 git 存储库中进行提交时,可以使用git add FILENAME然后使用git commit来选择要暂存和提交的文件。但是,如果有些文件您永远不想提交怎么办?很容易意外提交它们(特别是如果您使用git add .暂存当前目录中的所有文件)。这时.gitignore文件就派上用场了。它让 Git 知道它应该忽略某些文件并且不跟踪它们。
您应该忽略哪种文件?
- 日志文件
- 包含 API 密钥/机密、凭证或敏感信息的文件
- macOS 上无用的系统文件,例如.DS_Store
- 生成的文件(如dist文件夹)
- 可以从包管理器下载的依赖项
- 也可能还有其他原因(也许你制作了一些todo.md文件)
你可以通过选择操作系统、文本编辑器或 IDE、语言和框架来了解在gitignore.io上要忽略哪些类型的文件。
.gitignore 的工作原理
它的工作原理如下。.gitignore文件是一个纯文本文件,其中每行包含要忽略的文件/目录的模式。通常,它放在存储库的根文件夹中,这是我推荐的。但是,您可以将其放在存储库中的任何文件夹中,也可以有多个.gitignore文件。文件中的模式与该.gitignore文件的位置相关。
文字文件名
最简单的模式是文字文件名,例如:
.DS_Store
这将忽略任何名为.DS_Store的文件,这是 macOS 上的常见文件。
目录
您可以忽略整个目录,只需包括它们的路径并在末尾添加/即可:
node_modules/
logs/
如果您省略末尾的斜线,它将匹配具有该名称的文件和目录。
通配符
*匹配0 个或多个字符( /除外)。因此,例如,*.log匹配以.log扩展名结尾的任何文件。
另一个示例是*~,它匹配任何以~结尾的文件,例如index.html~
您还可以使用?,它匹配除/之外的任何一个字符。
否定
您可以使用!前缀来否定将被忽略的文件。
*.log
!example.log
在此示例中,example.log不会被忽略,尽管所有其他以.log结尾的文件都会被忽略。
但请注意,您不能否定被忽略目录内的文件:
logs/
!logs/example.log
由于性能原因,git 仍然会忽略这里的logs/example.log,因为整个logs目录都被忽略了。
双星号
**可用于匹配任意数量的目录。
- **/logs匹配所有名为 logs 的文件或目录(与模式logs相同)
- **/logs/*.log匹配日志目录中所有以.log结尾的文件
- logs/**/*.log匹配logs 目录及其任何子目录中以.log结尾的所有文件
**还可用于匹配目录内的所有文件,例如logs/**匹配日志内的所有文件。
评论
任何以#开头的行都是注释:
# macOS Files
.DS_Store
个人 .gitignore 规则
由于.gitignore文件已签入存储库,因此如果您想忽略某些文件而不将其添加到存储库的.gitignore规则中,则有几个选项可供选择。例如,您可能在某个特定项目上使用一些特殊文件,或者您可能使用与团队成员不同的编辑器,并且始终希望忽略这些类型的文件。
本地存储库 .gitignore 规则
如果您只想忽略此存储库中的某些文件,则可以将它们放在.git/info/exclude中。
全局 .gitignore 规则
如果您想忽略计算机上所有存储库中的某些文件,可以将它们放在全局.gitignore文件中。首先,您必须使用以下命令向 Git 添加设置:
git config --global core.excludesFile ~/.gitignore
然后您可以将任何全局规则添加到~/.gitignore。
如果我已经签入了怎么办?
如果您已经提交了文件,Git 将不会忽略该文件。您必须先取消跟踪该文件,然后它才会开始忽略它。您可以使用以下命令取消跟踪该文件:
git rm --cached FILENAME
调试
如果您遇到问题,可以使用带有详细选项的git check-ignore 命令来找出某些文件被忽略的原因。
git check-ignore -v example.log
输出将会像这样:
.gitignore:1:*.log example.log
在这个例子中,项目根目录下的.gitignore文件导致example.log被忽略,而导致它被忽略的模式是第一行的*.log 。
概括
几乎每个项目都会遇到 Gitignore 文件。忽略正确的文件以及个人 gitignore 规则选项非常重要。如需了解更多详细信息,请查看Pro Git 书中有关 gitignore 的部分。
关于作者
我是一名全栈软件工程师,也是BookBytes播客的主持人。您可以在Twitter上关注我。
了解更多
探索 Pluralsight 的这些 Git 课程以继续学习:
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~