文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
忽略文件
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以创建一个名为 .gitignore
的文件,列出要忽略的文件模式。
忽略规则匹配语法
在 .gitignore 文件中,每一行的忽略规则的语法如下:
- 空格不匹配任意文件,可作为分隔符,可用反斜杠转义
#
开头的文件标识注释,可以使用反斜杠进行转义- ! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
- / 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
- / 开始的模式匹配项目跟目录
- 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
- ** 匹配多级目录,可在开始,中间,结束
- ? 通用匹配单个字符
- [] 通用匹配单个字符列表
需要注意的 **
:
- 如果一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论