gitignore 忽略特定文件
文章目录
- 概述
- 用法例子
- 编写规则
- 忽略规则
- 参考文档
概述
当你在 Linux 环境进行 C++ 开发的时候,每次编译总会产生大量的目标文件,此时使用 git status
查看总会提示 Untracked files
,但这些目标文件又不需要加入到仓库进行管理,所以为了更准确地管理源码文件,并获得更简洁清晰的改动提示。你可以在项目根目录添加一个 .gitignore
文件,并将需要忽略的文件写到该文件中去,Git 将自动忽略这些特定文件。
比如一个典型的 C++ .gitignore
文件类似这样子:
# Compiled object files
*.o
*.obj
此时 Git 将忽略所有以 .o
结尾或者 .obj
结尾的编译目标文件。
当然我不建议你从头开始编写自己的 .gitignore
文件,因为 github 网站已经为我们提供了各种配置文件,你可以 git clone
下来也可以直接在线浏览:https://github.com/github/gitignore,根据自己的需求进行组合即可。比如你可以将 C.gitignore 与 C++.gitignore 组合成一个 .gitignore
来满足项目中既有 C 代码也有 C++ 代码的情况。
克隆远程 gitignore 仓库:
git clone https://github.com/github/gitignore
用法例子
还是以 C.gitignore 为例,讲解一下 .gitignore
的用法与编写规则:
# Prerequisites
*.d
- 以
#
开头的行代表注释; - 匹配当前目录与子目录下所有以
.d
结尾的文件或者文件夹;比如它将匹配foo.d
,bar/foo.d
文件或path.d/
,bar/path.d/
文件夹; - 空行表示不匹配任何文件,所以空行可用作分隔行提高可读性。
*.dSYM/
*.mod*
modules.order
Module.symvers
Mkfile.old
dkms.conf
- 如果某一行是以右斜杠结尾,它将只匹配文件夹;换言之,
*.dSYM/
代表的意思是匹配当前目录与子目录下所有以.dSYM/
结尾的文件夹,但不匹配以.dSYM
结尾的普通文件或软链接符号;比如它只匹配foo.dSYM/
,bar/foo.dSYM/
文件夹; - 匹配当前目录与子目录下所有包含
.mod
的文件或者文件夹;比如它匹配.mod
,foo.mod
,foo.module
,foo.mod.d
等; - 匹配当前目录与子目录下具体名称的
modules.order
文件或文件夹。
接下来我们以 Autotools.gitignore 为例,重点看看右斜杠 "/"
在 .gitignore
的匹配规则:
Makefile.in
/autoscan.log
m4/libtool.m4
- 不带右斜杠,匹配当前目录与子目录下所有的
Makefile.in
文件或文件夹; - 以右斜杠开头,将仅匹配当前目录下的
autoscan.log
,但不匹配foo/autoscan.log
文件; - 模式当中包含右斜杠
("/")
的话,将只匹配当前目录下的m4/libtool.m4
,但不匹配foo/m4/libtool.m4
; - 归纳为,如果模式当中包含右斜杠,将只匹配当前目录下的文件或文件夹;因此
m4/libtool.m4
也等同于/m4/libtool.m4
的写法。
我们再以 CakePHP.gitignore 为例,讲解一下感叹号 "!"
的用法:
/tmp/cache/models/*
!/tmp/cache/models/empty
- 忽略
/tmp/cache/models
文件夹下的所有文件; - 但不忽略
/tmp/cache/models/empty
文件; - 以
("!")
开头的行将不会被忽略,一般用于希望忽略整个文件夹的内容,但仍有部分文件或文件夹需要更新到仓库中的情况。 - 使用
"\"
能够对"!"
进行转义,如\!important.txt
匹配的是文件名以"!"
开头的!important
文件。
接下来我们看看 NetBeans.gitignore 与 JetBrains.gitignore 关于 ("**")
双星号的用法:
**/nbproject/private/
.idea/**/workspace.xml
- 以
"**"
加上"/"
开头匹配所有的文件夹; - 右斜杠带上
"**"
后面再带一个右斜杠表示匹配 0 个或任意多个文件夹;.idea/**/workspace.xml
匹配.idea/workspace.xml
,.idea/foo/worksapce.xml
或者.idea/foo/bar/workspace.xml
;
最后我们看看一些中括号表达式的使用例子,可以参考 Actionscript.gitignore,Vim.gitignore 或 TeX.gitignore 等:
[Bb]in/
*.py[cod]
[._]sw[a-p]
*.eledsec[1-9][0-9]
[]
是定义匹配的字符范围。比如[a-zA-Z0-9]
表示相应位置的字符要匹配英文字符和数字;[Bb]in/
匹配Bin/
与bin/
文件夹;- 匹配
*.pyc
,*.pyo
及*.pyd
; - 匹配以
.
或_
开头,后跟swa
,swb
,swc...swp
的字符; - 匹配最后两位从
10
开始直到99
的数字。
编写规则
- 空行不匹配任何文件;
- 以
"#"
开头的行代表注释; - 以
"!"
开头的行不被忽略; - 反斜杠
"\"
代表转义; - 右斜杠
"/"
结尾仅匹配文件夹; - 以右斜杠
"/"
开头或包含在模式中,仅匹配当前文件夹; - 星号
"*"
匹配任何字符; - 两个星号
"**"
匹配 0 个或任意多个文件夹; - 中括号
"[]"
表达式定义匹配的字符范围。
忽略规则
在 gitignore 文件中,每一行指定了一个忽略规则,当决定是否忽略一个路径的时候,Git 通常会从多个源进行检查,优先级从高到低:
- 从命令行读取可用的忽略规则;
- 从当前目录读取
.gitignore
文件; - 读取 Git 仓库目录下的
.git/info/exclude
文件; - 读取
core.excludesFile
参数定义的文件,默认值是 $XDG_CONFIG_HOME/git/ignore,如果环境变量 $XDG_CONFIG_HOME 未定义或者为空,则默认读取~/.config/git/ignore
文件。
参考文档
[1] Pro Git
[2] gitignore 官方文档
[3] Git教程 - 廖雪峰的官方网站
[4] git help ignore
[5] man gitignore
gitignore 忽略特定文件相关推荐
- Android studio 开发中 用git实现批量忽略特定文件的方法
git实现批量忽略特定文件的方法 在用AndroidStudio开发项目的时候,3个人协同开发,那么用Git同步代码,会将模块中的大量iml文件同步,每次都会提交和更新,一个一个的去忽略他们,显然是最 ...
- git .gitignore 忽略的文件还会被提交
.gitignore 新加忽略文件,发现忽略的文件还会提交.用下面方法就会生效了 .gitignore // 去缓存 添加 提交 git rm -r --cached . git add . git ...
- SVN同步时忽略特定文件或文件夹
在使用SVN同步的时候,经常会提示一些比如.classpath等不需要同步的配置文件,可以通过设置来忽略这一部分的文件或者文件夹. 下面提到的两种方法有一点区别,方法一是MyEclipse的设置,类似 ...
- git用.gitignore忽略指定文件
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chinahuyong/article/details/52839837 .gitignore 配置文 ...
- Git中.gitignore忽略文件(maven项目)
使用情景: 有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们 解决方案: 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略 ...
- gitignore忽略文件夹_原创 | 详解gitignore的使用方法,让你尽情使用git add .
点击上方蓝字,关注并星标,和我一起学技术. 大家好,欢迎来到周一git专题. 今天和大家聊聊gitignore的作用,其实如果你英文还可以的话,你应该已经基本上猜到它的作用了.ignore在英文当中的 ...
- git使用.gitignore 忽略文件和忽略已经提交过的文件
使用码云或者github创建项目的时候现在都会自动生成.gitignore文件,一定要注意先pull –rebase origin master 下来后在git add,也就是说先把.gitignor ...
- .gitignore忽略文件提交服务器
# git https://github.com/xxx/test.git # cd test # touch .gitignore //创建忽略规则.gitignore忽略规则简单说明 # 表示此为 ...
- git .gitignore忽略文件的用法
.gitignore的用法 Git忽略文件.gitignore详解 在工程中,并不是所有文件都需要保存到版本库中的,例如"target"目录及目录下的文件就可以忽略.在Git工作区 ...
最新文章
- Java中的简单工厂模式(转)
- 数学建模记录(如何组织,如何参加)(一)
- 案例分析 | SAP如何帮助企业实现端到端的数字化供应链管理
- centos7下升级cmake,很简单
- Node.js 在本地生成日志文件
- [CareerCup][Google Interview] 找出现次数
- Java基础day6
- [css] 举例说明with属性的fill-available有什么应用场景
- Extjs grid 设置行字体颜色
- 算法的优缺点_一文总结机器学习各算法优缺点
- DOS下文件操作命令
- python删除链表重复节点_LeetCode-python 82.删除排序链表中的重复元素 II
- python爬虫怎么翻页_python爬虫怎么实现翻页
- LuatOS-HMI概述
- excel曲线拟合怎么弄
- C语言学习杂记1|学习软件选择
- 科研绘图 | MATLAB科研绘图之折线图
- Simulink 环境基础知识(二十一)--优化、估计和扫描模块参数值
- java中的字符串池
- 0014 UVA1589 象棋 Xiangqi