git的 .gitignore 配置概述

学习背景:自己在使用git时发现有时会上传很多无用的配置文件,或者在项目中已经包含一个本地的git仓库,导致上一级项目上传总是报错,所以学习采用gitignore配置忽略包含的子项目。

使用场景

.gitignore 配置文件用于 配置不需要加入版本管理的文件,配置好该文件可以为我们的版本管理带来很大的便利。比如项目的本地配置信息,如果你上传到Git中去其他人pull下来的时候就会和他本地的配置有冲突,所以这样的个性化配置文件我们一般不把它推送到git服务器中。

忽略文件的原则

  • 忽略操作系统自动生成的文件,比如缩略图等;
  • 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  • 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
  • 忽略一些没有必要上传的大文件、图片等

Git忽略规则

在 .gitingore 文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源,它的优先级如下(由高到低):

  • 从命令行中读取可用的忽略规则
  • 当前目录定义的规则
  • 父级目录定义的规则,依次递推
  • $GIT_DIR/info/exclude 文件中定义的规则
  • core.excludesfile中定义的全局规则

在 .gitignore 文件中,每一行的忽略规则的语法如下:

  • 空格不匹配任意文件,可作为分隔符,可用反斜杠转义
  • # 开头的文件标识注释,可以使用反斜杠进行转义
  • ! 开头的模式标识否定,该文件将会再次被包含, 如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
  • / 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
  • / 开始的模式匹配项目跟目录
  • 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
  • ** 匹配多级目录,可在开始,中间,结束
  • ? 通用匹配单个字符
  • [] 通用匹配单个字符列表

  • bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件

  • /bin: 忽略根目录下的bin文件
  • /*.c: 忽略 cat.c,不忽略 build/cat.c
  • debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
  • **/foo: 忽略/foo, a/foo, a/b/foo等
  • a/**/b: 忽略a/b, a/x/b, a/x/y/b等
  • !/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
  • *.log: 忽略所有 .log 文件
  • config.php: 忽略当前路径的 config.php 文件

除了可以在项目中定义 .gitignore 文件外,还可以设置全局的 git .gitignore 文件来管理所有Git项目的行为。这种方式在不同的项目开发者之间是不共享的,是属于项目之上Git应用级别的行为。

这种方式也需要创建相应的 .gitignore 文件,可以放在任意位置。然后在使用以下命令配置Git:

git config --global core.excludesfile ~/.gitignore

如果你发下 .gitignore写得有问题,需要找出来到底哪个规则写错了,可以用 git check-ignore命令检查:

$ git check-ignore -v HelloWorld.cpp
.gitignore:1:*.cpp    HelloWorld.cpp

.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。解决方法就是先把本地缓存删除,然后再提交。

Original: https://www.cnblogs.com/world-explorer/p/16159186.html
Author: O_fly_O
Title: git的 .gitignore 配置概述

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606588/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SQLI-LABS(Less-9、10)

    Less-9(GET-Blind-Time based-Single Quotes) 打开 Less-9页面,可以看到页面中间有一句 Please input the ID as …

    Linux 2023年6月6日
    0103
  • 读书笔记:CSAPP 11章 网络编程

    深入理解计算机系统 第11章 本章代码:Index of /afs/cs/academic/class/15213-f15/www/code/22-netprog2其中包含本章课本…

    Linux 2023年6月13日
    0101
  • LeetCode-556. 下一个更大元素 III

    题目来源 556. 下一个更大元素 III 题目详情 给你一个正整数 n ,请你找出符合条件的最小整数,其由重新排列 n中存在的每位数字组成,并且其值大于 n 。如果不存在这样的正…

    Linux 2023年6月7日
    0104
  • centos7中防火墙转为iptables

    1、关闭firewall systemctl stop firewalld.service #停止firewall systemctl disable firewalld.serv…

    Linux 2023年6月6日
    092
  • 软件测试基础理论

    软件基础的理论 一, 什么是软件产品 它是一个逻辑产品,没有实体,包括程序,文档和数据,需要通过终端设备才能体现出来功能和作用 二, 软件产品的中间过程文档 客户需求 &#…

    Linux 2023年6月7日
    088
  • JavaScript闭包

    <!doctype html> <html lang="en"> <head> <title>&#x95…

    Linux 2023年6月13日
    083
  • Docker 技术系列之安装Redis单机版和集群版

    欢迎关注刘哥讲技术。上一节我们讲到通过docker安装了多台的mysql,很简单,那么我们这一节,利用 Docker 在一台机器上部署多个 Redis 实例。 那么redis是什么…

    Linux 2023年5月28日
    089
  • Conky配置(中文备注)

    conkyrc地址:~/.conkyrc 需要注意的是,因为每个人的网卡都不同,所以在网络部分,例如 downspeed wlp0s20f3 ,后面的 wlp0s20f3 每个人都…

    Linux 2023年6月7日
    070
  • 自定义 systemd service

    Red Hat Linux 自 7 版本后 采用systemd 形式取代原先 init ,用户可以参考 系统service 创建自己的service ,以便于日常统一管理,系统se…

    Linux 2023年6月6日
    0109
  • 卷积神经网络(简单)

    1.反向传播BP 反向传播(Backpropagation)是”误差反向传播”的简称,是一种与最优化方法,用来训练人工神经网络的常见方法。 简单来说就是: …

    Linux 2023年6月6日
    0131
  • Linux之间的文件传输方式

    大数据集群往往涉及文件复制。我在研究大数据时总结了几种方法。 [En] Big data cluster often involves file copying. I summed…

    Linux 2023年5月27日
    0133
  • 那些技术实战中的架构设计方法

    上个月我写的一篇文章《关于技术能力的思考和总结》引起了大家的关注,好多读者的评论”以写代想、以想促真、以讲验真”,大家的感受很深刻,基于上次的文章,这篇文章…

    Linux 2023年6月8日
    090
  • 命令大全目录

    linux 本文来自博客园,作者:ivanlee717,转载请注明原文链接:https://www.cnblogs.com/ivanlee717/p/16341641.html O…

    Linux 2023年6月7日
    0142
  • OpenResty入门

    OpenResty介绍 OpenResty通过汇聚各种设计精良的 Nginx模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web …

    Linux 2023年6月8日
    098
  • DOS-批处理隐藏自身窗口

    批处理隐藏运行效果代码,防止出现黑窗口不建议非法用途,可以用来执行命令,提供用户体验。 运行bat时隐藏cmd窗口的方法 运行bat时隐藏cmd窗口的方法 可以编辑一个vbs脚本,…

    Linux 2023年6月8日
    0115
  • Mybatis 实体别名支持通配符扫描

    问题 Spring集成Mybatis的项目中,可以为指定包下的实体取别名,这样在Mapper xml文件中可以省略实体类的全路径名称,只写类名称即可;但是在多模块项目中,可能需要将…

    Linux 2023年6月14日
    0112
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球