文章目录

  • 概述
  • 用法例子
  • 编写规则
  • 忽略规则
  • 参考文档

概述

当你在 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
  1. # 开头的行代表注释;
  2. 匹配当前目录与子目录下所有以 .d 结尾的文件或者文件夹;比如它将匹配 foo.dbar/foo.d 文件或 path.d/bar/path.d/ 文件夹;
  3. 空行表示不匹配任何文件,所以空行可用作分隔行提高可读性。
*.dSYM/
*.mod*
modules.order
Module.symvers
Mkfile.old
dkms.conf
  1. 如果某一行是以右斜杠结尾,它将只匹配文件夹;换言之,*.dSYM/ 代表的意思是匹配当前目录与子目录下所有以 .dSYM/ 结尾的文件夹,但不匹配以 .dSYM 结尾的普通文件或软链接符号;比如它只匹配 foo.dSYM/bar/foo.dSYM/ 文件夹;
  2. 匹配当前目录与子目录下所有包含 .mod 的文件或者文件夹;比如它匹配 .modfoo.modfoo.modulefoo.mod.d 等;
  3. 匹配当前目录与子目录下具体名称的 modules.order 文件或文件夹。

接下来我们以 Autotools.gitignore 为例,重点看看右斜杠 "/".gitignore 的匹配规则:

Makefile.in
/autoscan.log
m4/libtool.m4
  1. 不带右斜杠,匹配当前目录与子目录下所有的 Makefile.in 文件或文件夹;
  2. 以右斜杠开头,将仅匹配当前目录下的 autoscan.log,但不匹配 foo/autoscan.log 文件;
  3. 模式当中包含右斜杠 ("/") 的话,将只匹配当前目录下的 m4/libtool.m4,但不匹配 foo/m4/libtool.m4
  4. 归纳为,如果模式当中包含右斜杠,将只匹配当前目录下的文件或文件夹;因此 m4/libtool.m4 也等同于 /m4/libtool.m4 的写法。

我们再以 CakePHP.gitignore 为例,讲解一下感叹号 "!" 的用法:

/tmp/cache/models/*
!/tmp/cache/models/empty
  1. 忽略 /tmp/cache/models 文件夹下的所有文件;
  2. 但不忽略 /tmp/cache/models/empty 文件;
  3. ("!") 开头的行将不会被忽略,一般用于希望忽略整个文件夹的内容,但仍有部分文件或文件夹需要更新到仓库中的情况。
  4. 使用 "\" 能够对 "!" 进行转义,如 \!important.txt 匹配的是文件名以 "!" 开头的 !important 文件。

接下来我们看看 NetBeans.gitignore 与 JetBrains.gitignore 关于 ("**") 双星号的用法:

**/nbproject/private/
.idea/**/workspace.xml
  1. "**" 加上 "/" 开头匹配所有的文件夹;
  2. 右斜杠带上 "**" 后面再带一个右斜杠表示匹配 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]
  1. [] 是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字;[Bb]in/ 匹配 Bin/bin/ 文件夹;
  2. 匹配 *.pyc*.pyo*.pyd
  3. 匹配以 ._ 开头,后跟 swaswbswc...swp 的字符;
  4. 匹配最后两位从 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 忽略特定文件相关推荐

  1. Android studio 开发中 用git实现批量忽略特定文件的方法

    git实现批量忽略特定文件的方法 在用AndroidStudio开发项目的时候,3个人协同开发,那么用Git同步代码,会将模块中的大量iml文件同步,每次都会提交和更新,一个一个的去忽略他们,显然是最 ...

  2. git .gitignore 忽略的文件还会被提交

    .gitignore 新加忽略文件,发现忽略的文件还会提交.用下面方法就会生效了 .gitignore // 去缓存 添加 提交 git rm -r --cached . git add . git ...

  3. SVN同步时忽略特定文件或文件夹

    在使用SVN同步的时候,经常会提示一些比如.classpath等不需要同步的配置文件,可以通过设置来忽略这一部分的文件或者文件夹. 下面提到的两种方法有一点区别,方法一是MyEclipse的设置,类似 ...

  4. git用.gitignore忽略指定文件

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/chinahuyong/article/details/52839837 .gitignore 配置文 ...

  5. Git中.gitignore忽略文件(maven项目)

    使用情景: 有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们 解决方案: 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略 ...

  6. gitignore忽略文件夹_原创 | 详解gitignore的使用方法,让你尽情使用git add .

    点击上方蓝字,关注并星标,和我一起学技术. 大家好,欢迎来到周一git专题. 今天和大家聊聊gitignore的作用,其实如果你英文还可以的话,你应该已经基本上猜到它的作用了.ignore在英文当中的 ...

  7. git使用.gitignore 忽略文件和忽略已经提交过的文件

    使用码云或者github创建项目的时候现在都会自动生成.gitignore文件,一定要注意先pull –rebase origin master 下来后在git add,也就是说先把.gitignor ...

  8. .gitignore忽略文件提交服务器

    # git https://github.com/xxx/test.git # cd test # touch .gitignore //创建忽略规则.gitignore忽略规则简单说明 # 表示此为 ...

  9. git .gitignore忽略文件的用法

    .gitignore的用法 Git忽略文件.gitignore详解 在工程中,并不是所有文件都需要保存到版本库中的,例如"target"目录及目录下的文件就可以忽略.在Git工作区 ...

最新文章

  1. Java中的简单工厂模式(转)
  2. 数学建模记录(如何组织,如何参加)(一)
  3. 案例分析 | SAP如何帮助企业实现端到端的数字化供应链管理
  4. centos7下升级cmake,很简单
  5. Node.js 在本地生成日志文件
  6. [CareerCup][Google Interview] 找出现次数
  7. Java基础day6
  8. [css] 举例说明with属性的fill-available有什么应用场景
  9. Extjs grid 设置行字体颜色
  10. 算法的优缺点_一文总结机器学习各算法优缺点
  11. DOS下文件操作命令
  12. python删除链表重复节点_LeetCode-python 82.删除排序链表中的重复元素 II
  13. python爬虫怎么翻页_python爬虫怎么实现翻页
  14. LuatOS-HMI概述
  15. excel曲线拟合怎么弄
  16. C语言学习杂记1|学习软件选择
  17. 科研绘图 | MATLAB科研绘图之折线图
  18. Simulink 环境基础知识(二十一)--优化、估计和扫描模块参数值
  19. java中的字符串池
  20. 0014 UVA1589 象棋 Xiangqi

热门文章

  1. js高频面试题(高频)
  2. 安利这几个制作Excel表格的技巧
  3. 北鼎新品K108小白壶全新亮相,经典搭配尽显百搭气场
  4. python表白源代码加音乐_Python 表白?别傻了,女神是拿来撩的!
  5. 支持iso和android的角色游戏,iOS 和安卓游戏终于互通了
  6. 陈宝仪(Redis-replicator作者)详解Redis协议
  7. 【阿里天池算法学习赛】测测你的一见钟情指数/机器学习/深度学习/数据处理/Python基础
  8. NoSQL数据库入门——书摘
  9. 【keras学习——Flatten层的用法】
  10. 关于java只有值传递