🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

如何使用.gitignore:管理您想从跟踪中排除的文件

通过之前的文章,我们学习了使用Git和GitHub进行基本操作的方法。然而,在实际项目中执行`git status`时,您是否曾遇到过这样的困惑:屏幕上显示了许多由操作系统自动生成的文件(如Mac的`.DS_Store`)、密码等敏感信息,或是大量的依赖文件(如`node_modules`),并心生疑问:“这些文件全都需要管理吗?”

本文将详细解说如何使用“`.gitignore`”文件,来有意地将那些不需要或不应该置于Git管理之下的文件和文件夹从跟踪对象中排除。正确使用`.gitignore`,可以保持仓库的整洁,并安全地管理您的项目。


什么是.gitignore?为什么需要排除文件?

`.gitignore`,顾名思义,是一个纯文本文件,用于记录希望Git“忽略(ignore)”的文件和文件夹列表。通过将此文件放置在项目的根目录中,Git便会将其模式匹配到的文件从`git status`的显示和`git add`的对象中排除掉。

那么,为什么需要排除文件呢?主要有三个原因:


.gitignore的基本写法和规则

`.gitignore`的写法非常简单。只需在项目的根目录(即`.git`文件夹所在的目录)创建一个名为`.gitignore`的文件,然后每行写入一个您想排除的文件名或文件夹名即可。

基本写法示例:

# 以“#”开头的行被视为注释

# 指定特定文件名进行排除
debug.log
config_secret.php

# 整个排除特定目录(末尾的斜杠可有可无)
node_modules/
dist

# 排除所有具有特定扩展名的文件
*.log
*.tmp

# 例外规则:使用“!”
# 忽略logs目录下的所有内容,但只跟踪important.log
logs/
!logs/important.log

由于也可以使用通配符(`*`),所以可以进行灵活的设置。对于所有项目都应共通排除的文件列表,可以通过gitignore.io这样的网站轻松生成,不妨利用一下。


实践!创建`.gitignore`并让文件被忽略的步骤

那么,让我们实际创建一个`.gitignore`文件,并确认一下不需要的文件是如何不再被跟踪的。

第一步:创建`.gitignore`文件

首先,在项目的根目录中创建`.gitignore`文件。由于文件名以点开头,在图形界面的文件浏览器中可能难以创建。在终端(或Git Bash)中执行以下命令是最可靠的方法。

touch .gitignore

第二步:填写希望排除的文件和文件夹

用文本编辑器打开创建的`.gitignore`文件,并试着写入Web开发中通常会排除的项目。

# OS / Editor Files
.DS_Store
.vscode/

# Dependencies
node_modules/

# Log files
*.log
npm-debug.log*

# Environment variables
.env

编辑完文件后,别忘了保存。

第三步:提交`.gitignore`文件本身

这个“排除规则”本身是所有团队成员都应该共享的重要设置。因此,`.gitignore`文件本身也应该被纳入Git的管理范围并进行提交。

git add .gitignore

git commit -m "添加 .gitignore 文件"

第四步:确认效果

让我们来确认一下文件是否真的被忽略了。创建一个我们写在忽略列表中的文件`debug.log`。

echo "This is a debug log." > debug.log

在这种状态下,请尝试执行`git status`。

git status

怎么样?`debug.log`应该不会出现在“Untracked files”的列表中,而是被完全忽略了。这样就成功了!


注意事项:已经被提交过的文件怎么办?

初学者容易犯的一个错误是,“在提交了重要文件之后,才慌忙地将其添加到`.gitignore`中”。然而,`.gitignore`只对从未被Git跟踪过的文件有效。

如果您想将一个已经被跟踪的文件(例如:`secret-key.php`)从Git的管理中移除,您需要使用以下命令将其从Git的跟踪列表(索引)中删除。

git rm --cached [文件名]

这个命令很安全,因为它只是将文件“从Git的跟踪对象中移除”,而不会从您的电脑上删除文件本身。执行后,别忘了将这个更改与`.gitignore`的修改一并提交。

git commit -m "停止跟踪 secret-key.php"