.gitignore忽略文件语法规则快速入门,附失效问题解决方案
第四章 Git忽略文件.gitignore规则
1. gitignore忽略语法
符号 | 解释 |
---|---|
# | 表示此为注释,将被Git忽略 |
*.a | 表示忽略所有 .a 结尾的文件 |
!lib.a | 表示但lib.a 除外 |
/TODO | 表示仅仅忽略项目根目录下的 TODO 文件,不包括subdir/TODO |
build/ | 表示忽略build/ 目录下的所有文件,过滤整个build文件夹; |
/mtk/ | 表示过滤整个文件夹 |
doc/*.txt | 表示会忽略doc/notes.txt ,但不包括 doc/server/arch.txt |
bin/: | 表示忽略当前路径下的bin文件夹下的所有内容,但不忽略 bin 文件夹 |
/*.c: | 表示忽略cat.c ,不忽略 build/cat.c ,即忽略当前目录下的所有.c文件子目录下的.c不忽略 |
**/foo: | 表示忽略/foo ,a/foo ,a/b/foo 等即忽略所有目录下的foo子目录 |
a/**/b: | 表示忽略a/b , a/x/b ,a/x/y/b 等 |
!/bin/run.sh | 表示不忽略bin目录下的run.sh文件 |
!.gitignore | 不忽略 .gitignore 文件 |
fd1/* | 忽略目录 fd1 下的全部内容,不管是根目录下的/fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略; |
/fd1/* | 忽略根目录下的 /fd1/ 目录的全部内容; |
2. .gitignor忽略规则查看
如果你发现.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查:
git check-ignore -v HelloWorld.class
.gitignore:1:*.class HelloWorld.class(结果)
可以看到HelloWorld.class匹配到了我们的第一条*.class的忽略规则所以文件被忽略了。
3. 注意事项
-
git对于.ignore配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效。
-
如果你不慎在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,因为.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。此时解决方法如下:
-
git清除本地缓存(改变成未track状态),然后再提交
git rm -r --cached . git add . git commit -m 'update .gitignore' git push -u origin master
-
-
一定要养成在项目开始就创建.gitignore文件的习惯,否则一单push,处理起来会非常麻烦。
4. git所管理的文件大致有4种状态
- Untracked: 未跟踪,此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过
git add
状态变为Staged. - Unmodify: 文件已经入库,未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改,而变为Modified. 如果使用
git rm
移出版本库, 则成为Untracked文件 - Modified:文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过
git add
可进入暂存staged状态,使用git checkout
则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 - Staged: 暂存状态. 执行**
git commit
则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态**。执行git reset HEAD filename
取消暂存, 文件状态为Modified。 - Git 状态 untracked 和 not staged的区别
- untrack 表示是新文件,没有被add过,是为跟踪的意思。
- not staged 表示add过的文件,即跟踪文件,再次修改没有add,就是没有暂存的意思
5. 前端.gitignore推荐配置
# 总是被忽略的扩展
*.bak
*.patch
*.diff
*.err
# git冲突合并的临时文件
*.orig
*.log
*.rej
*.swo
*.swp
*.zip
*.vi
*~
*.sass-cache
*.tmp.html
*.dump
# 操作系统或编辑器文件夹
.DS_Store
._*
.cache
.project
.settings
.tmproj
*.esproj
*.sublime-project
*.sublime-workspace
nbproject
thumbs.db
*.iml
# 要忽略的文件夹
.hg
.svn
.CVS
.idea
node_modules/
jscoverage_lib/
bower_components/
dist/
6. 实用的快速生成.gitignore模板工具
本章参考链接:https://www.cnblogs.com/kevingrace/p/5690241.html
本文来自博客园,作者:你就是星光,转载请注明原文链接:https://www.cnblogs.com/xzqyl/p/17045399.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具