如何使用 .gitignore 文件

Git作为一种广泛应用的版本控制系统,为开发人员的项目协作提供了有力支持。它不仅能跟踪项目随时间推移所做的修改,还允许在必要时将项目回退到之前的版本。其工作流程主要包括使用git add命令添加文件,然后通过git commit命令提交文件。

在团队项目开发中,有时某些文件或部分内容并不适合与他人共享,即不需要将其包含或提交到项目的主版本中。例如,使用git commit命令时,默认会添加所有文件,包括那些不必要或不应该提交的文件。虽然Git没有专门的git ignore命令来实现忽略特定文件的功能,但可以借助.gitignore文件达成这一目的。

本文将详细介绍.gitignore文件,包括其概念、使用方式以及如何忽略先前已提交的文件,帮助开发人员更好地管理项目文件。

一、什么是 .gitignore文件

在任何有效的Git仓库中,文件可分为以下几类:

  1. 追踪的(tracked) :指Git已知的所有文件或目录,这些文件和目录是通过git add添加并由git commit提交到主仓库的。

  2. 未被追踪的(untracked) :在工作目录中新建但尚未通过git add暂存的文件或目录。

  3. 被忽略的(ignored):Git明确要排除、忽略,在Git仓库中无需关注的文件或目录。本质上,这是一种告知Git哪些未被追踪的文件应始终保持未追踪状态且永不提交的机制。

所有被忽略的文件都记录在.gitignore文件中。.gitignore是一个纯文本文件,其中包含了项目中需要Git忽略和不追踪的特定文件和文件夹列表。在该文件中,可以通过指定特定文件或文件夹的名称或模式,来让Git忽略单个或多个文件、文件夹。

二、使用.gitignore文件

通常,.gitignore文件放置在仓库的根目录(也称为父目录或当前工作目录)下,该目录包含了构成项目的所有文件和其他文件夹。当然,也可以将其放在版本库的任何文件夹中,甚至可以有多个.gitignore文件。

在基于Unix的系统(如macOS或Linux)中,若要通过命令行创建.gitignore文件,可先打开终端程序(如macOS上的Terminal.app),然后使用cd命令导航到包含项目的根文件夹,执行以下命令创建文件:

touch.gitignore

需要注意的是,名称前带点(.)的文件默认是隐藏的,单独使用ls命令时无法查看隐藏文件。若要在命令行中查看包括隐藏文件在内的所有文件,需在ls命令中添加-a标志,如下所示:

bash 复制代码
ls -a

三、.gitignore文件应包含的内容

一般来说,应添加到.gitignore文件中的文件类型主要是那些不需要提交的文件。可能出于安全考虑,或者因为它们是本地文件,对其他项目开发者无必要。常见的此类文件包括:

  1. 操作系统文件 :不同操作系统(如macOS、Windows和Linux)会生成特定的隐藏文件,其他开发者无需使用,因为其系统也会生成。例如,macOS上的Finder会生成.DS_Store文件,用于存储用户对文件夹外观和显示的偏好设置,如图标大小和位置。

  2. 应用程序生成的配置文件:由代码编辑器和IDE(集成开发环境)等应用程序生成的配置文件,这些文件是根据个人配置和偏好定制的。

  3. 自动生成的文件和编译特定文件 :从项目使用的编程语言或框架自动生成的文件,以及编译后的特定代码文件,如.o文件。

  4. 软件包管理器生成的文件夹 :如npm的node_modules文件夹,用于保存和跟踪本地安装的每个软件包的依赖关系。

  5. 包含敏感数据和个人信息的文件 :例如包含凭证(用户名和密码)的文件以及含有环境变量的文件,如.env文件(通常包含需要保密的API密钥)。

  6. 运行时文件 :如.log文件,用于记录操作系统的使用活动、错误信息以及事件历史。

四、在Git中忽略文件和文件夹的方法

  1. 忽略特定文件 :若只想忽略一个特定文件,需提供该文件在项目根目录下的完整路径。例如,要忽略根目录下的text.txt文件,可在.gitignore文件中添加:
arduino 复制代码
/text.txt

若文件位于根目录下的test目录中,如test/text.txt,则可按如下方式添加:

arduino 复制代码
/test/text.txt

也可写成:

bash 复制代码
test/text.txt
  1. 忽略同名文件 :若要忽略所有具有特定名称的文件,只需写出该文件的字面名称。例如,要忽略任何text.txt文件,可在.gitignore中添加:
arduino 复制代码
text.txt

此时无需提供完整路径,该模式将忽略项目中任何位置的同名文件。3. 忽略整个目录及其内容 :要忽略整个目录及其所有内容,需包含目录名称,并在末尾添加斜线/。例如,要忽略名为test的目录(包括其中的所有文件和子目录),可添加:

bash 复制代码
test/

需要注意的是,如果仅写文件或目录的名称而不添加斜线/,该模式将同时匹配任何带有此名称的文件或目录,例如:

bash 复制代码
# 匹配任何名字带有test的文件和目录
test
  1. 忽略以特定单词开头的文件或目录 :若要忽略所有名称以特定单词开头的文件或目录,需指定要忽略的名称,后跟*通配符选择器。例如,要忽略所有以img开头的文件和目录,可添加:
css 复制代码
img*
  1. 忽略以特定扩展名结尾的文件 :若要忽略所有以特定文件扩展名结尾的文件,需使用*通配符选择器,后跟要忽略的文件扩展名。例如,要忽略所有以.md文件扩展名结尾的markdown文件,可在.gitignore文件中添加:

    *.md

此模式将匹配项目中任何位置的以.md为扩展名的文件。6. 对忽略规则设置例外 :假设在.gitignore文件中添加了忽略所有.md文件的规则(如.md),但不希望Git忽略README.md文件。此时,可使用带有感叹号的否定模式(!)来排除特定文件,如下所示:

yaml 复制代码
# 忽略所有.md文件
.md
# 不忽略README.md文件
!README.md

通过在.gitignore文件中同时使用这两种模式,可实现除README.md文件外,忽略所有以.md结尾的文件。但需要注意的是,如果忽略了整个目录,此模式将不起作用。例如,已忽略所有test目录(test/),即使在test文件夹内有不想忽略的example.md文件,也无法通过!test/example.md这样的方式排除。

五、忽略先前提交的文件

创建新仓库时,最佳实践是在提交之前创建包含所有要忽略文件和不同文件模式的.gitignore文件。因为Git只能忽略尚未提交到仓库的未被追踪的文件。

若之前已提交了某个文件但希望撤回,例如不小心提交了存储环境变量的.env文件,可按以下步骤操作:

  1. 更新.gitignore文件以包含.env文件:
bash 复制代码
# 给.gitignore添加.env文件
echo ".env" >>.gitignore
  1. 告知Git不要追踪该文件,将其从索引中删除:
bash 复制代码
git rm --cached.env

git rm命令配合--cached选项,可从版本库中删除文件,但不会删除实际文件,该文件仍会在本地系统和工作目录中作为被忽略的文件存在。此时,git status会显示文件已不在版本库中,而ls命令会显示文件仍存在于本地文件系统中。若要从版本库和本地系统中删除该文件,则省略--cached选项。3. 使用git add命令将.gitignore添加到暂存区:

csharp 复制代码
git add.gitignore
  1. 最后,使用git commit命令提交.gitignore文件:
sql 复制代码
git commit -m "update ignored files"
相关推荐
ZHOUPUYU1 小时前
最新 neo4j 5.26版本下载安装配置步骤【附安装包】
java·后端·jdk·nosql·数据库开发·neo4j·图形数据库
web150850966412 小时前
【React&前端】大屏适配解决方案&从框架结构到实现(超详细)(附代码)
前端·react.js·前端框架
理想不理想v2 小时前
前端项目性能优化(详细)
前端·性能优化
Q_19284999062 小时前
基于Spring Boot的找律师系统
java·spring boot·后端
CodeToGym2 小时前
使用 Vite 和 Redux Toolkit 创建 React 项目
前端·javascript·react.js·redux
ZVAyIVqt0UFji3 小时前
go-zero负载均衡实现原理
运维·开发语言·后端·golang·负载均衡
谢家小布柔3 小时前
Git图形界面以及idea中集合Git使用
java·git
Cachel wood3 小时前
Vue.js前端框架教程8:Vue消息提示ElMessage和ElMessageBox
linux·前端·javascript·vue.js·前端框架·ecmascript
SomeB1oody3 小时前
【Rust自学】4.1. 所有权:栈内存 vs. 堆内存
开发语言·后端·rust
winner88814 小时前
git merge 冲突 解决 show case
java·git·git merge·git冲突