.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

posted @   你就是星光  阅读(171)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示