如何使用 .gitignore:实用指南与示例

在使用Git时,保持存储库的清洁和有序不仅仅是最佳实践,对于顺畅的协作和高效的版本控制来说至关重要。这就是.gitignore发挥作用的地方。这个方便的文件告诉Git应忽略哪些文件,防止不必要的混乱,使您的提交专注于真正重要的内容。

没有.gitignore,您的存储库可能很快就会被临时文件、日志和其他不应该出现在版本控制中的东西填满。更糟糕的是,您可能会意外地分享敏感信息。

在本教程中,您将学习如何创建和使用.gitignore文件,以保持项目整洁,避免常见陷阱,并更有效地使用Git。让我们开始吧!

.gitignore文件是什么?

.gitignore文件是Git中使用的配置文件,用于指示版本控制系统在暂存或提交更改时应忽略哪些文件或目录。

它可以防止不必要的文件(如临时文件、系统生成的文件或与构建相关的文件)混淆您的存储库。保持存储库的清洁使协作更容易,并确保只跟踪必要的文件。

.gitignore 文件是一个简单的文本文件,放置在 Git 仓库的根目录中。它包含告诉 Git 忽略哪些文件或目录的模式。这些模式可以根据项目的需求进行定制,帮助您保持一个组织良好的仓库。

对 Git 和 GitHub 感到陌生?通过 这个 GitHub 和 Git 教程 来获得一个适合初学者的版本控制介绍。

以下是一些常见的文件和目录类别,您应该考虑忽略:

  • 构建产物:在构建过程中生成的可以从源代码重新创建的文件,比如:
    • dist/build/(前端和后端构建产物)
    • target/(Java 和其他编译语言的构建产物)
  • 依赖项:包管理系统会为安装的库创建目录,这些目录不应被跟踪:
    • node_modules/(Node.js)
    • vendor/(PHP,Composer)
    • .venv/venv/(Python 虚拟环境)
  • 特定系统文件:这些文件是操作系统自动生成的,不对项目有贡献:
    • .DS_Store(macOS)
    • Thumbs.db(Windows)
  • IDE 配置文件:每个开发者可能使用不同的开发环境,因此他们的个人设置不应包含在版本控制中:
    • .vscode/(VS Code)
    • .idea/(JetBrains IDEs)
    • .project.settings/(Eclipse)
  • 日志和临时文件:日志、缓存和临时文件应被忽略,以防止不必要的混乱:
    • *.lognpm-debug.log*yarn-debug.log*yarn-error.log*(来自各种工具的日志)
    • *.tmp*.bak(临时和备份文件)
    • .mypy_cache/__pycache__/(Python 缓存)
    • .ipynb_checkpoints/(Jupyter Notebook 检查点)
  • 环境和秘密文件:敏感凭据和特定环境的配置不应被提交:
    • .env.env.local.env.development.env.production
    • secrets.jsonconfig.json(敏感配置文件)
  • 数据库和存储文件:这些文件在本地生成,不应包含在版本控制中:
    • *.sqlite*.sqlite3*.db (SQLite 数据库文件)
    • dump.rdb (Redis 数据库转储)
  • CI/CD 和覆盖文件:测试覆盖报告和其他 CI/CD 工件应被忽略:
    • coverage/*.lcov (代码覆盖报告)
    • .tox/.pytest_cache/(Python 测试文件)

需要安装 Git 吗?请按照我们逐步指南这个 Git 安装教程中快速完成设置。

.gitignore 的语法

正如提到的,.gitignore 文件包含与存储库中的文件名匹配的模式,以确定它们是否应被忽略。

基本语法

在核心上,.gitignore 文件由多行组成,每行代表一个要忽略的模式。模式可以匹配:

  • 特定文件
  • 文件类型
  • 目录

该文件还支持注释,可以通过在行首添加 # 来添加注释,并通过空行来提高可读性。

以下是基本结构的概述:

  • 忽略特定文件: 您可以直接列出文件名以忽略它。
secrets.txt
  • 忽略整个目录:通过在目录名称末尾添加/,您可以忽略该目录中的所有内容。
logs/
  • 忽略特定类型的所有文件:通配符(*)可用于忽略具有特定扩展名的所有文件。
*.py
  • 否定:您可以使用!来否定一个模式,并明确跟踪某些文件或目录,否则这些文件或目录将被忽略。
*.txt # Ignores all .txt files !readme.txt # Except for readme.txt

如何创建和使用 .gitignore 文件

创建和使用.gitignore非常简单。在本部分,我将逐步介绍步骤。

创建.gitignore文件

步骤1:导航至存储库的根目录。通常将.gitignore文件放在Git项目的根目录中。打开您的终端或命令行,并导航至Git存储库的根目录:

cd /path/to/your/repo

步骤2:创建.gitignore文件。在根目录中后,使用任何文本编辑器创建.gitignore文件或通过在终端中运行命令来创建:

touch .gitignore

步骤 3:向文件添加模式。在文本编辑器中打开.gitignore文件,并添加必要的模式以忽略文件或目录。每行代表一个不同的模式。

以下是在基本项目中常用的.gitignore文件示例:

# 忽略 node_modules 和依赖目录 node_modules/ vendor/ # 忽略构建产物 dist/ build/ *.log # 忽略系统生成的文件 .DS_Store Thumbs.db # 忽略环境和机密文件 .env config.json

添加完必要的模式后,请保存文件。当暂存或提交更改时,Git 将自动忽略这些文件。

步骤 4:将文件提交到版本库。将 .gitignore 文件提交到版本库是很重要的,以便所有协作者使用相同的忽略规则。这确保了项目中每个人的一致性。

git add .gitignore git commit -m "Add .gitignore file" git push

一旦 .gitignore 文件被提交,您就为整个团队建立了共享的忽略规则。

想要掌握 Git 中的推送和拉取吗?了解如何在 这个 Git 推送和拉取教程中与远程版本库同步您的工作。

使用 .gitignore 的最佳实践

创建.gitignore文件是保持干净的Git存储库的基本步骤,但为了确保文件能够长期有效地管理,应遵循一些最佳实践。

使用全局.gitignore

对于跨多个项目工作的开发人员,可能希望从每个存储库中排除特定文件,而不考虑项目类型。

您可以配置一个全局.gitignore文件,而不是将它们添加到每个项目的.gitignore文件中,这样配置的文件将适用于系统上的所有存储库。

配置全局.gitignore文件的方法:

  • 创建.gitignore_global文件:
touch ~/.gitignore_global
  • 添加要全局忽略的文件模式,例如:
.DS_Store *.log /.vscode/ /.idea/
  • 设置 Git 使用全局 .gitignore
git config --global core.excludesfile ~/.gitignore_global

利用现有模板

您可以利用预配置的特定语言、框架或环境的 .gitignore 模板,而不是为每个新项目从头开始构建 .gitignore 文件。

这些模板中最好的资源之一是GitHub 的官方 .gitignore 存储库,在这里您可以找到针对数百种编程语言和框架定制的 .gitignore 文件。

定期审查 .gitignore

随着项目的发展,可能需要在.gitignore文件中包含新文件和目录。定期审查和更新文件以反映项目当前状态非常重要。

可能需要更新.gitignore文件的一些情况包括:

  • 采用生成额外文件的新工具或库(例如,切换到新的构建系统)。
  • 重构或重新组织目录,可能会导致应该被排除的新文件。
  • 删除已过时的文件或不再属于项目的目录。

排除.gitignore文件中的问题

即使设置了.gitignore文件,您可能会遇到特定文件被跟踪,或者模式似乎不能按预期工作的情况。本节将涵盖两个常见的故障排除领域以及如何解决它们。

跟踪已提交的文件

.gitignore文件不会反向应用于已提交的文件。

如果在某些文件已经被提交后向.gitignore添加模式,则即使它们与.gitignore文件中的模式匹配,Git仍将继续跟踪它们。

要停止跟踪已经提交的文件,请按照以下步骤进行:

  • 从 Git 的跟踪中移除文件: 使用 git rm 命令将其从仓库中移除,同时保留在工作目录中。
git rm --cached <file_or_directory_name>
  • 提交更改: 在从 Git 的跟踪中移除文件后,提交更改以确保这些文件不再是版本控制历史的一部分。
git commit -m "Stop tracking ignored files"
  • 将更改推送到远程仓库: 最后,将更改推送到远程仓库,以确保这些文件不再被跟踪。
git push

执行完这些步骤后,Git 将停止跟踪这些文件。已提交的文件仍将保留在您的工作目录中,但将根据您的 .gitignore 模式被忽略在未来的提交中。

确保模式正常工作 

有时,您可能会注意到本应被忽略的特定文件仍会显示在 Git 的状态中或被跟踪。

请按照以下步骤确保您的 .gitignore 模式正常工作:

  • 检查文件状态: 使用 git status 命令查看 Git 正在跟踪的文件。这将帮助您验证您的被忽略文件是否仍在列表中。
git status
  • 确保模式正确:仔细检查您的.gitignore模式的语法,确保其格式正确。例如:
    • 确保您使用正确的目录路径(相对于存储库的根目录)。
    • 添加/以针对特定目录,以防止跟踪所有具有相似名称的文件。
  • 刷新缓存:如果您最近更新了.gitignore文件,但更改未生效,Git 可能仍然保留其先前的缓存。要刷新缓存,请运行以下命令:
git rm -r --cached . git add . git commit -m "Refresh .gitignore"
  • 检查异常:有时,.gitignore中的特定模式可能会被文件其他地方的更具体模式覆盖。检查您的规则,确保没有冲突的模式。

寻找一个快速的Git参考?使用这个Git备忘单,可以随时掌握基本命令。

结论

.gitignore文件可能看起来很小,但在保持Git仓库清洁和可管理方面起着重要作用。通过忽略不必要的文件,如依赖项、构建产物和系统生成的文件,您可以确保项目保持有序,免于混乱。

在本教程中,您已经学会了如何创建一个.gitignore文件,添加模式,并应用最佳实践,以保持您的存储库高效。有了这些技能,您将避免版本控制方面的麻烦,并使团队中的每个人在合作方面更加顺畅。

如果您希望深入了解Git技能,请查看Git基础知识,以获取一个结构化的学习路径。您还可以探索诸如Git基础GitHub概念入门等实践课程,构建对版本控制和协作工作流程的扎实理解!

Source:
https://www.datacamp.com/tutorial/gitignore