如何使用.gitignore:管理您想从跟踪中排除的文件
通过之前的文章,我们学习了使用Git和GitHub进行基本操作的方法。然而,在实际项目中执行`git status`时,您是否曾遇到过这样的困惑:屏幕上显示了许多由操作系统自动生成的文件(如Mac的`.DS_Store`)、密码等敏感信息,或是大量的依赖文件(如`node_modules`),并心生疑问:“这些文件全都需要管理吗?”
本文将详细解说如何使用“`.gitignore`”文件,来有意地将那些不需要或不应该置于Git管理之下的文件和文件夹从跟踪对象中排除。正确使用`.gitignore`,可以保持仓库的整洁,并安全地管理您的项目。
什么是.gitignore?为什么需要排除文件?
`.gitignore`,顾名思义,是一个纯文本文件,用于记录希望Git“忽略(ignore)”的文件和文件夹列表。通过将此文件放置在项目的根目录中,Git便会将其模式匹配到的文件从`git status`的显示和`git add`的对象中排除掉。
那么,为什么需要排除文件呢?主要有三个原因:
- 1. 防止混入敏感信息: 如果不小心将包含数据库密码或API密钥的配置文件(如`.env`)上传到GitHub的公开仓库,可能会导致严重的安全事故。
- 2. 排除自动生成的文件: 由操作系统或编辑器自动生成的配置文件(`.DS_Store`, `.vscode/`)、通过`npm install`等命令生成的大量依赖文件夹(`node_modules/`)、以及构建时生成的文件(`dist/`)等,都可以在其他环境中自动重新生成,因此没有必要将它们纳入版本控制。
- 3. 保持仓库的整洁: 将版本控制的对象限定为人类编写的核心源代码,可以使仓库看起来清爽、一目了然,从而方便他人参与项目。
.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"