返回介绍

忽略文件

发布于 2024-12-09 12:49:34 字数 1753 浏览 0 评论 0 收藏 0

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。

忽略规则匹配语法

在 .gitignore 文件中,每一行的忽略规则的语法如下:

  1. 空格不匹配任意文件,可作为分隔符,可用反斜杠转义
  2. # 开头的文件标识注释,可以使用反斜杠进行转义
  3. ! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
  4. / 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
  5. / 开始的模式匹配项目跟目录
  6. 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
  7. ** 匹配多级目录,可在开始,中间,结束
  8. ? 通用匹配单个字符
  9. [] 通用匹配单个字符列表

需要注意的 **

  • 如果一个 pattern 以 ** 开头,如 **/foo,最后会匹配所有文件夹下的 foo 文件(夹);
  • 如果一个 pattern 以 /** 开头,如 abc/**,则表示匹配 abc 目录下的所有内容;
  • 如果一个 pattern 中间包含 ,如 a/ /b,则会匹配 a/b、a/x/b、a/x/y/b 以及所有类似的内容。

常用匹配示例

# 忽略当前路径下的 bin 文件夹,bin 文件夹下的所有内容都会被忽略,不忽略 bin 文件
bin/

# 忽略根目录下的 bin 文件
/bin

# 忽略 cat.c,不忽略 build/cat.c
/*.c

# 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
debug/*.obj

# 忽略/foo, a/foo, a/b/foo 等
**/foo

# 忽略 a/b, a/x/b, a/x/y/b 等
a/**/b

# 不忽略 bin 目录下的 run.sh 文件
!/bin/run.sh

# 忽略所有 .log 文件
*.log

# 忽略当前路径的 config.php 文件
config.php

# 忽略所有以.o 或.a 结尾的文件
*.[oa]

# 忽略所有以波浪号结尾的文件
*~

# 忽略 node_modules/目录下的所有文件
node_modules/

# 忽略所有以.json 的文件
*.json

# 忽略 foo 目录下除了 foo/bar/中的内容
foo/
!foo/bar/

Git 操作中,add 之后再加入 gitignore

Git 操作中经常会出现这样的问题,当我们 git add 之后,突然想起来要添加一个 gitignore 文件,但是一些诸如 node_modules/, cache/ 等文件已经被 add 进去了,这些文件不会被 ignore 掉,怎么办?最直接的方式是:

# 这一步的操作相当于回到 git add 上一步
git rm -r --cached .
# 然后重新 add
git add --all .
# 重新提交
git commit -m 'update .gitignore'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文