Git使用 - 忽略特定文件 - gitignore
1. 背景
前提知识:在工作目录下的每一个文件都不外乎有两种状态:已追踪(tracked),或者 未追踪(untracked)。
在使用Git管理项目的时候,可能会用到一些文件,但是这些文件我们又不想提交到Git进行管理。
比如
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
- 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件;
- 代码运行过程中产生的,.log文件,.html文件;
每次提交的时候,由于这些文件尚未被Git追踪,都会提醒 Untracked files...,但是我们又不想让Git来管理这些文件。
这篇文章就来介绍,怎么让 Git忽略掉这些文件,不再每次提醒我们。
2. 创建.gitignore 文件
我们在项目的根目录下,创建一个名为 .gitignore的文件。
$ touch .gitignore
列出要忽略的文件的模式。
*.log
.idea/**/workspace.xml
第一行表示,忽略当前目录下 以及 子目录下所有的 .log文件。
第二行表示,忽略 .idea目录下 及其子目录下,所有的 workspace.xml文件
这样,就可以把 .gitignore文件提交到Git进行版本管理,其他人拉下来项目的时候也就自动生效了。
3. 文件内容样式
.gitignore文件遵循以下规范
所有空行或者以 # 开头的行都会被 Git 忽略。
可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
匹配模式可以以(/)开头防止递归。
匹配模式可以以(/)结尾指定目录。
要忽略指定模式以外的文件或目录,可以在模式前加上叹号(!)取反。
其中所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 遵守以下规范
- 星号(*)匹配零个或多个任意字符;
- [abc] 匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
- 问号(?)只匹配一个任意字符;
- 如果在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。
- 使用两个星号(//)表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等。
一个 .gitignore的例子
# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件
!lib.a
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
Note:
有些时候,你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了:
$ git add App.class
The following paths are ignored by one of your .gitignore files:
App.class
Use -f if you really want to add them.
如果你确实想添加该文件,可以用 -f 强制添加到Git:
$ git add -f App.class
或者你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查:
$ git check-ignore -v App.class
.gitignore:3:*.class App.class
4. exclude文件
exclude文件在 ,exclude文件跟 .ignore文件的效果类似,都可以忽略掉某些文件。不同点在于
- exclude文件位于当前项目的 .git/info/exlude目录下, .gitignore文件位于 当前项目的根目录下
- exclude文件只在本地有效,无法git add,跟别人共享, .gitignore文件可上传到Git进行版本管理
5. gitignore 文件模板
我们不需要自己写 .gitignore文件,以下两种方式帮你提供了
Git官方维护了一个仓库,里面有各种语言下需要 ignore 的文件,我们只需要根据需要,自己组合一下就能用了。
根目录下包括 主流语言的模板,通常情况下用这个就够用了。
Global文件夹里面包括,各类的编辑器、工具以及操作系统,比如 Matlab, JetBrain, linux, VisualStudioCode。
community文件夹里包括一些非主流的 语言、工具以及项目。
我们的项目必须忽略的文件是由三部分构成的,操作系统 + IDE + 语言,这三种还得组合起来,以上是一个开源网站。
比如我们目前使用的是Intellij + Java,只需要在搜索框中搜索以上关键词,就可以生成这我们需要的 .gitignore文件。
https://www.toptal.com/developers/gitignore/api/intellij,java
6. 参考文档
- 1. github/gitignore: A collection of useful .gitignore templates
- 2. gitignore.io - Create Useful .gitignore Files For Your Project
- 3. Git - Recording Changes to the Repository
- 4. Git - gitignore Documentation
- 5. 忽略特殊文件 - 廖雪峰的官方网站
- 6. Ignoring files - GitHub Docs
Git使用 - 忽略特定文件 - gitignore的更多相关文章
- git跟踪忽略规则文件.gitignore
在使用Git的过程中,我们希望有的文件比如临时文件,编译的中间文件等不要被跟踪,也不需要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交. 配置语法 以斜杠"/"开 ...
- Git始终忽略特定文件的某一行内容
笔者在编写Z Shell文件的时候经常会使用到set -x来开启调试,但不希望提交到仓库 解决方案 Git提供了一种文件过滤器,此方法可以帮助在提交时移除set -x 我们先来编写脚本,如何移除这一行 ...
- Android studio 开发中 用git实现批量忽略特定文件的方法
git实现批量忽略特定文件的方法 在用AndroidStudio开发项目的时候,3个人协同开发,那么用Git同步代码,会将模块中的大量iml文件同步,每次都会提交和更新,一个一个的去忽略他们,显然是最 ...
- 版本控制git之四-忽略特殊文件
版本控制git之四-忽略特殊文件 有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked fi ...
- git操作忽略.iml文件
git操作忽略.iml文件** 参考:https://blog.csdn.net/m0_38001814/article/details/87354584 因为.iml文件的修改导致代码pull失败 ...
- 14.Git忽略特殊文件.gitignore
有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files ...,有强迫症的童鞋心里肯定 ...
- Git 忽略特定文件或文件夹
在代码编译过程中,可能会生成一些目标文件或其他我们不希望提交到服务器的文件或文件夹, 但是因为是生成出来的文件/文件夹,在每次使用git status 查看状态的时候git系统总会提示这些 文件或文件 ...
- Git学习之忽略特殊文件.gitignore的配置
1.Mac中使用Git上传项目代码时忽略.DS_Store文件 简单的说Mac每个目录都会有个文件叫.DS_Store,它是用于存储当前文件夹的一些Meta信息.所以每次查看Git目录的状态,如果没有 ...
- git设置忽略某些文件或文件夹
在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 .gitignore 文件的方法.如果没有 .gitignore 文件,就自己创建一个,手动创建会提示你输入文件名称,因此,你 ...
随机推荐
- 微信小程序常用表单校验方法(手机号校验、身份证号(严格和非严格校验、验证码六位数字校验))
util.js function isPhone(value) { if (!/^1(3|4|5|7|8)\d{9}$/.test(value)) { return false } else { re ...
- python---二维数组的查找
""" 在一个二维数组中(每个一维数组的长度相同), 每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. """ # ...
- nodejs的tream(流)解析与模拟文件读写流源码实现
什么是流? 可读流于可写流 双工流于转换流 背压机制与文件流模拟实现 一.什么是流? 关于流的概念早在1964年就有记录被提出了,简单的说"流"就是控制数据传输过程的程序,比如在那 ...
- .NET Core(.NET6)中gRPC使用
一.简介 简单解析一下gRPC,gRPC 是一个由Google开源的,跨语言的,高性能的远程过程调用(RPC)框架. 特点: 跨语言 内容protobuf格式(比json体积小),网络传输快 使用HT ...
- 巧用 JuiceFS Sync 命令跨云迁移和同步数据
近年来,云计算已成为主流,企业从自身利益出发,或是不愿意被单一云服务商锁定,或是业务和数据冗余,或是出于成本优化考虑,会尝试将部分或者全部业务从线下机房迁移到云或者从一个云平台迁移到另一个云平台,业务 ...
- 进阶实战 css 点击按钮的样式
1. html结构 <div class="menu-wrap"> <input type="checkbox" class="t ...
- 联邦平均算法(Federated Averaging Algorithm,FedAvg)
设一共有\(K\)个客户机, 中心服务器初始化模型参数,执行若干轮(round),每轮选取至少1个至多\(K\)个客户机参与训练,接下来每个被选中的客户机同时在自己的本地根据服务器下发的本轮(\(t\ ...
- Delphi 类库(DLL)动态调用与静态调用示例讲解
在Delphi或者其它程序中我们经常需要调用别人写好的DLL类库,下面直接上示例代码演示如何进行动态和静态的调用方法: { ************************************** ...
- vulnhub DC:1渗透笔记
DC:1渗透笔记 靶机下载地址:https://www.vulnhub.com/entry/dc-1,292/ kali ip地址 信息收集 首先扫描一下靶机ip地址 nmap -sP 192.168 ...
- Linux命令篇 - grep 命令
grep grep searches the named input FILEs (or standard input if no files are named, or if a single hy ...