大家好,欢迎来到周一git专题。

今天和大家聊聊gitignore的作用,其实如果你英文还可以的话,你应该已经基本上猜到它的作用了。ignore在英文当中的意思是忽视、忽略,gitignore自然就是git当中的忽视和忽略,言下之意就是忽略某些文件。所以gitignore的作用就是帮助我们在git add时将我们指定的一些文件自动排除在外,不提交到git当中。

ignore的作用

看到这里你可能很疑惑,git创造出来就是为了管理代码和文件的,为什么还要禁止一些文件提交呢?

其实也很简单,举个很简单的例子。比如当我们写一些编译型语言的时候,比如C、C++、Java、go。我们在运行之前往往需要编译一下将它们编译成可执行的二进制文件,也称为binary文件。编译之后的binary文件其实是比较大的,要比源码大很多。经常一个几十行的代码编译出来好几百KB甚至1MB这都是很正常的,像是这些二进制文件我们就完全没有必要上传。

因为不论是谁拿到源代码编译一下就可以获得一样的结果,完全没有上传可执行文件的必要。相反它还会在git仓库当中占据大量的空间,以后不论项目经过多少次迭代,它都会一直停留在git仓库当中,占据磁盘资源。

像是这样没有必要上传的文件还有很多,比如Java编译出来的class文件,一些中间结果、配置文件等等。我们往往图方便都是会喜欢在使用git add提交文件的时候使用git add .也就是提交全部的命令来提交。但是如果我们目录下有这些我们不希望提交的内容的话,也一样会全部提交上去,所以我们希望可以在一个地方进行设置,这样当我们使用git add .的时候可以避开一些我们不希望提交上的文件。

这个用来设置的地方就是gitignore文件。

使用方法

gitignore的使用方法非常简单,我们在git目录下创建一个.gitignore文件,然后在这个文件当中列举出我们不希望提交的文件即可。

凡是列在这个文件当中的名称,当我们在使用git add的时候都会替我们忽略掉。我们也没有必要从头开始编写这个gitignore文件,因为git当中已经替我们写好了很多模板,我们可以直接拿过来参考。

模板的地址:https://github.com/github/gitignore

我们打开之后会看到各种ignore文件,这些都是为各个语言定制的gitignore文件。

我们随便打开一个看看。比如打开一个golang的:

从注释上我们可以看出来,主要都是一些编译之后的结果

设置ignore

gitignore文件的语法简单说起来可以归结为5条,这5条都挺简单的,我们一条一条来说。

#表示注释

这一条很简单,没什么好说的,#开头的行会被git忽略,因为它表示注释。这个注释方法和Python以及shell脚本是一样的,写过的同学应该都不陌生。

忽略整个文件夹

如果我们想要忽略某个路径下文件夹内的所有内容,那么我们可以写出文件夹的路径再加上斜杠作为结尾即可。

举个例子,假如说我们希望过滤掉src/build文件夹下的所有内容,我们可以这么写:

src/build/

那么这个路径下的所有内容都会被忽略,这个路径是相对路径。

!表示取反

前面说了,我们可以写出一个文件夹的路径来忽略掉这个文件夹下的所有文件,那么假如说这个文件夹当中有一个文件是我们希望提交的,那应该怎么办呢?

我们可以用!命令来取反,表示我们指定的可以不遵守忽略条件的文件名。

比如说我们想要保留src/build路径下叫做main.go的文件,那么我们可以加上一行:

!main.go

glob模式匹配

我们都知道正则表达式非常复杂,正则表达式入门这一本书足足有好几百页这么厚。但是实际上我们一般情况往下用不到这么复杂的模式匹配,所以我们在shell命令当中常用的简化了的模式匹配规则,它比正则表达式要简单很多。

比如*可以代表一切的字符串,可以是0个也可以是任意多个字符。[abc]表示匹配方括号当中的任何一个字符,?表示匹配任何一个字符。[0-9]表示匹配0-9当中任意一个数字,两个*号表示任何中间目录,比如src/**/build,可以匹配到src/test/build,也可以匹配到src/current/build。

比如你想要过滤掉所有的txt格式的文件,你可以这么写:

*.txt

比如你想要过滤掉build路径下的所有json文件,你可以这么写:

build/*.json

虽然glob的模式匹配远远不如正则表达式那么强大,但是对于常用的文件匹配的场景来说,它已经足够了。灵活用好这几种规则已经足够可以应付几乎所有场景下的文件ignore了。

我们洋洋洒洒写了这么多,但是其中的关键点只有零碎的几个,学习成本并不高,但是学会了之后可以一劳永逸地解决很多问题,因此我个人觉得它的性价比还是很高的,非常值得一学。

最后,衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、关注、转发

原文链接,求个关注

本文使用 mdnice 排版

- END -

详解gitignore的使用方法,让你尽情使用git add .的更多相关文章

  1. 详解Python模块导入方法

    python常被昵称为胶水语言,它能很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松联结在一起.python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的 ...

  2. HTTPS(SSL)详解以及PHP调用方法

    HTTPS 详解 1. 两个加密秘钥的概念 (1) 对称加密 即加密的秘钥和解密的秘钥一样 (2) 非对称加密 即加密的秘钥和解密的秘钥不一样, 分别称为公钥 和 私钥,  公钥完全公开  私钥解密者 ...

  3. View绘制详解(五),draw方法细节详解之View的滚动/滑动问题

    关于View绘制系列的文章已经完成了四篇了,前面四篇文章主要带小伙伴们熟悉一下View的体系的整体框架.View的测量以及布局等过程,从本篇博客开始,我们就来看看View的绘制过程.View的绘制涉及 ...

  4. Spring框架详解介绍-基本使用方法

    1.Spring框架-控制反转(IOC) 2.Spring框架-面向切面编程(AOP) 3.Spring 内置的JdbcTemplate(Spring-JDBC) Spring框架-控制反转(IOC) ...

  5. 详解Linux安装GCC方法

    转载自:http://blog.csdn.net/bulljordan23/article/details/7723495/ 下载: http://ftp.gnu.org/gnu/gcc/gcc-4. ...

  6. 为你详解Linux安装GCC方法

    下载: http://ftp.gnu.org/gnu/gcc/gcc-4.5.1/gcc-4.5.1.tar.bz2浏览: http://ftp.gnu.org/gnu/gcc/gcc-4.5.1/查 ...

  7. 详解POI的使用方法(DOM和SAX的方式)及存在的不足

    简介 Apache POI是一套基于 OOXML 标准(Office Open XML)和 OLE2 标准来读写各种格式文件的 Java API,也就是说只要是遵循以上标准的文件,POI 都能够进行读 ...

  8. Java中常见方法详解合集(方法的定义及语法结构)

    Java的方法定义 1.方法的定义 方法是控制对象的动作行为方式与准则,在Java中方法位于类体下又有另一种含义. 普通的方法在类中称为"实例方法",因为方法的调用需要创建对象,而 ...

  9. 【曹工杂谈】详解Maven插件调试方法

    前言 今年的更新频率简直是降至冰点了,一方面平时加班相对多一些了,下班只想玩手机:另一方面,好像进了大厂后,学习动力也很低了,总之就,很懒散,博客的话,今年都才只更新了不到5篇. 现在慢慢有一点状态, ...

随机推荐

  1. java初探(1)之秒杀项目总结

    在开始总结之前,先记录一个刚看到的博客,编程规约.该博客记录了一些java开发上的规范,可以在编码的时候引入这些规范. 无论流行框架一直怎么改变,web开发中的三层架构一直属于理论的基础存在. 表现层 ...

  2. WinForm使用Setuo Project打包安装包 (附带vs2019 InstallerProjects安装程序)

    vs2019 InstallerProjects安装程序地址: 链接:https://pan.baidu.com/s/1K5iDuQT4CBBw2dJjRLqhjg提取码:dfhy 转载至https: ...

  3. Go语言 | 并发设计中的同步锁与waitgroup用法

    今天是golang专题的第16篇文章,我们一起来聊聊golang当中的并发相关的一些使用. 虽然关于goroutine以及channel我们都已经介绍完了,但是关于并发的机制仍然没有介绍结束.只有go ...

  4. oracle之时间类型

    Oracle 时间类型及Timezone 20.1 Oracle的六种时间类型 DATETIMESTAMPTIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TI ...

  5. Fiddler的基本界面介绍

    前言 fiddler的界面,主要是分以下6个模块. 一:主菜单栏: 可以参考:https://www.cnblogs.com/sjl179947253/p/7620524.html 二:工具栏: 1. ...

  6. [Java并发编程之美]第2章 并发编程的其他基础知识 补充知识

    基本概念 并行与并发 并行:单位时间内多个任务同时执行(多核CPU). 并发:同一时间段内多个任务同时都在执行(CPU时间片轮转). 线程安全性问题 线程安全问题:指多个线程同时读写一个共享资源而没有 ...

  7. 《图解HTTP》学习笔记之入门

    学习HTTP之前,很必要了解一下关于Web网络基础. TCP/IP协议族 1.应用层:应用层决定了向用户提供应用 服务时的通信活动,比如FTP(文件传输协议).DNS(域名系统).HTTP(超文本传输 ...

  8. FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  9. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(7)

    项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)–技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个静 ...

  10. hystrix熔断器之metrics

    Metric概述 HystrixCommands和HystrixObservableCommands执行过程中,会产生执行的数据,这些数据对于观察调用的性能表现非常有用. 命令产生数据后,Metric ...