忽略某些文件

  • 忽略某些文件

    • 通过.gitignore文件
    • 其他规则源
    • 如何选择规则源
    • 参考资料

对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。

通过.gitignore文件

假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gitignore 的文件,在里面列出 lib.a

使用 Windows 的同学注意了,如果你在资源管理器里新建一个.gitignore文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器(比如 Notepad++)里“保存”或者“另存为”就可以把文件保存为.gitignore了。

除了在.gitignore里面列出要忽略的文件名,Git 还支持一种更为丰富的机制:一个.gitignore文件里可以包含一个文件名模式列表,指定哪一类文件要忽略。格式如下:

  1. 空行会被忽略;以“#”号开头的行可以用于注释;

  2. 一个简单的字面值文件名(literal filename)匹配任何目录中的同名文件;

  3. 目录名由末尾的反斜线(/)标记。这能匹配同名的目录和子目录,但是不匹配文件或符号链接;

  4. 支持标准的 glob 模式。glob 模式类似于 shell 所使用的简化版正则表达式。具体来讲,*匹配零个或更多字符,[abc]匹配方括号内的任意单个字符(在这个例子里是a、b或c),而?则匹配任意单个字符。在方括号中使用短划线分隔的两个字符(比如 [0-9])能够匹配在这两个字符范围内的任何单个字符(在这个例子里是0到9之间的任何数字)。注意*不能匹配路径分隔符。

  5. 可以用**匹配嵌套的目录,比如 a/**/z 能够匹配 a/z、a/b/z 和 a/b/c/z 等。

  6. /开头的模式可用于禁止递归匹配,即只匹配当前目录或文件,而不匹配子目录或子目录下的文件。

  7. !开始的模式表示取反,即原本被忽略的目录或文件又被 Git 追踪。注意:出于性能考虑,Git不会遍历已经被忽略的目录,因此,定义在被忽略目录下的.gitignore规则都是无效的。

说明

  1. Git 允许在版本库中任何目录下有.gitignore文件。每个文件都只影响该目录及其所有子目录。
  2. 对于多个.gitignore文件,Git 会根据“就近原则”决定结果。简而言之,就是当前目录(如果当前目录没有被上层目录忽略)的模式能推翻上层目录的模式,最接近当前目录的上层目录的模式能推翻更上层的目录模式。
  3. 忽略只对未跟踪的文件有效,对于已加入版本库的文件无效。
  4. 如果要停止 track 一个已经被 Git 追踪的文件,可以用git rm --cached file命令 。
  5. 如果想把某个被忽略的文件加入版本控制, 而又不想修改 gitignore规则(也许改起来特别麻烦),你可以使用 git add -f file 命令。

其他规则源

除了.gitignore文件,Git 还有其他的规则源。通常来说,Git 会从多个可能的规则源获取gitignore规则来决定是否要忽略某一个具体的路径。以下列出了各种规则源:

  1. 配置变量core.excludesFile中指定的规则
  2. .git/info/exclude中定义的规则
  3. .gitignore文件(后文会具体说明)
  4. 从命令行输入的规则

说明:

  1. 在判断是否会忽略某个路径时,Git 会根据上述列表中的模式以一定的顺序进行模式匹配,然后根据就近优先原则决定结果(从上至下,以最后匹配上的为准)。
  2. 对于.gitignore文件,Git 会从项目的顶级目录开始,依次遍历项目中的所有文件。子目录(如果没有被父级目录忽略的话)可以覆盖父目录中的规则。
  3. 在一个规则源内部,如果有多个规则匹配,以最后匹配上的为准。

以上三点,总结成一句话——就近原则

如何选择规则源

规则定义在哪个文件中取决于该规则的作用域:

  • 如果一个gitignore规则应该被Git追踪,或者希望别人clone仓库后这些规则也生效,那么它就应该被定义在.gitignore文件中

  • 如果只想规则在某一个仓库中生效,但是不需要共享给其他用户, 那么可以把它定义在此仓库的.git/info/exclude中,这样它不会随clone而被复制

  • 如果你想某个规则对所有仓库都生效,则可以配置变量core.excludesFile。例如

    $ touch ~/.gitignore
    $ git config --global core.excludesFile ~/.gitignore 

    第1行:在家目录下面创建一个文件.gitignore,其实路径和文件名可以自选。当然你需要在这个文件中写点规则

    第2行:配置变量core.excludesFile


参考资料

  1. https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013758404317281e54b6f5375640abbb11e67be4cd49e0000(廖雪峰)
  2. https://blog.csdn.net/yongf2014/article/details/79268871
  3. https://www.atlassian.com/git/tutorials/saving-changes/gitignore#git-ignore-patterns
  4. 《Git 高手之路》,人民邮电出版社
  5. 《Git 版本控制管理(第2版)》,人民邮电出版社
  6. 《精通 Git(第2版)》,人民邮电出版社

忽略某些文件 —— Git 学习笔记 05相关推荐

  1. Git 学习笔记 ignore 忽略文件

    Git 学习笔记 ignore .gitignore 文件 添加目标到 gitignore IDEA 中初始化 Git 仓库 问题 1. 无法添加到 gitignore (手动添加也没效果) 2. 文 ...

  2. Git 学习笔记:自定义Git(完)

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  3. Git学习笔记:标签管理以及GItHub

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  4. Git学习笔记(四)

    一.忽略特殊文件 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件. 不需要从头写.gitignore文件,GitHub已经为我们 ...

  5. Git学习笔记使用记录

    文章目录 Git学习笔记 基本 配置环境 Install 初始化workspace Git 全局设置Global Configuration: 配置账户 创建项目仓库Create project re ...

  6. git学习笔记(全,附命令大全)

    git学习笔记(全) 注:本文参考自廖雪峰官网 下图来自Git Cheat Sheet侵删 git优点 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上. Git跟踪并管理的是修改 ...

  7. Git 学习笔记:6 GitHub

    Git 学习笔记:6 GitHub 账户的 创建和配置 SSH访问 头像 邮件地址 两步验证 对项目做贡献 派生(fork)项目 GitHub 流程 创建合并请求 利用合并请求 合并请求的进阶用法 将 ...

  8. Git学习笔记(复习专用,B站狂神说)

    Git学习笔记 1.Git和Linux的历史 2.常用的Linux命令 3.Git基本理论(核心) 工作流程: 4.Git项目搭建 本地仓库搭建 5.Git文件操作 忽略文件 6.GitHub的使用 ...

  9. Git学习笔记(一)

    Git学习笔记(二) 目录 一.git简介 1.1 历史 1.2 特点 二.安装与配置并创建一个版本库 2.1 安装配置 2.2 创建一个版本库 三.版本的创建与回退 3.1 创建一个版本 3.1.1 ...

最新文章

  1. 二叉树的先序遍历和非递归遍历
  2. 12:MYSQL 使用函数创建自增序列管理表(批量使用自增表,设置初始值,自增幅度)
  3. 中小型企业VMware服务器虚拟化实用案例
  4. window mysql proxy_window下mysql-proxy简单使用
  5. Hadoop系列之三:函数式编程语言和MapReduce
  6. Uno 平台 一 WinUI终极跨平台方案(一)
  7. 家长工作比较忙,没有什么时间来带孩子,交给家里老人会养成一些坏习惯吗?
  8. 【机房收费系统】---上下机
  9. code::blocks打造自己的开发环境
  10. ajax嵌套ajax的坏处,promise解决ajax的多重嵌套
  11. 基于python的异方差检验_【Python】统计科学之讲讲异方差的检验
  12. HTML顶部状态栏更改背景,适合做导航栏背景的图片
  13. 什么时候可以重用我~
  14. 攻防世界MISC进阶区刷题记录
  15. 基于html家具装饰网站设计毕业设计.rar(含论文毕设+项目源码+答辩设计+成绩评分表+评定表)
  16. 微信小程序—刷脸实名认证
  17. android自定义滚动条(ScrollBar)样式
  18. 7-46 新浪微博热门话题(字符串)
  19. Verilog数字系统设计——8位数字比较器
  20. PAT A1010 Radix +神

热门文章

  1. HDU 1561 The more ,The Better
  2. java Web发布的两种方式
  3. 在没有网的windows环境下安装Python模块
  4. Python从入门到入土-Python3 File(文件) 方法
  5. GIS讲堂第二课-地图切片简介以及OL中的调用
  6. 将Jquery序列化后的表单值转换成Json
  7. aop:aspectj-autoproxy /
  8. Javascript 面向对象编程初探(一)--- 封装
  9. iOS使用Charts框架绘制—柱形图
  10. select case语句 is和to用法