如何从 Git 提交中排除文件

GitGitBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Git 是一个强大的版本控制系统,但管理仓库中的文件和目录可能具有挑战性。本教程将指导你完成从 Git 提交中排除文件的过程,帮助你维护一个干净且有条理的仓库。你将学习如何创建和管理.gitignore 文件,理解排除文件的好处,并探索管理.gitignore 规则的最佳实践。在本教程结束时,你将掌握有效控制哪些文件和目录包含在 Git 提交中的知识。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/SetupandConfigGroup(["Setup and Config"]) git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git/SetupandConfigGroup -.-> git/config("Set Configurations") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/clean("Clean Workspace") git/DataManagementGroup -.-> git/reset("Undo Changes") subgraph Lab Skills git/config -.-> lab-392846{{"如何从 Git 提交中排除文件"}} git/status -.-> lab-392846{{"如何从 Git 提交中排除文件"}} git/clean -.-> lab-392846{{"如何从 Git 提交中排除文件"}} git/reset -.-> lab-392846{{"如何从 Git 提交中排除文件"}} end

了解.gitignore 文件

Git 是一个强大的版本控制系统,可帮助开发人员有效地管理其代码库。然而,项目中的并非所有文件都需要被跟踪并提交到仓库中。这就是 .gitignore 文件发挥作用的地方。

.gitignore 文件是 Git 仓库中的一个特殊文件,它告诉 Git 要忽略哪些文件或目录。这意味着即使这些文件存在于工作目录中,它们也不会被跟踪或提交到仓库。

.gitignore 文件通常放在 Git 仓库的根目录中,但也可以放在子目录中,以便将忽略规则应用于项目的特定部分。

.gitignore 文件使用特定的语法来定义要忽略的文件和目录模式。这些模式可以包括:

  • 特定文件名(例如 file.txt
  • 文件扩展名(例如 *.log
  • 目录(例如 tmp/
  • 通配符(例如 *.pyc

.gitignore 文件是管理 Git 仓库内容的关键工具,因为它有助于保持仓库的整洁,并专注于重要文件。

graph TD A[工作目录] --> B[.gitignore] B --> C[暂存区] C --> D[Git 仓库]

通过了解 .gitignore 文件的用途和用法,开发人员可以确保其 Git 仓库只包含必要的文件,从而使仓库更易于管理和高效。

从 Git 提交中排除文件的好处

从 Git 提交中排除文件可以为开发人员和项目团队带来诸多好处。以下是一些主要优势:

减小仓库大小

通过排除不必要的文件,如编译后的二进制文件、日志文件或临时文件,Git 仓库的整体大小可以显著减小。这可以使克隆、获取和推送操作更快,特别是对于大型项目。

提升性能

较小的仓库大小在处理仓库时也能带来性能提升,因为 Git 操作会更快且更高效。

使提交历史更清晰

从提交历史中排除不相关的文件可以使项目的提交历史更有条理且更易于理解。这对于多个开发人员为代码库做出贡献的协作项目尤其有益。

保护敏感数据

排除敏感文件,如包含 API 密钥或密码的配置文件,有助于防止敏感信息在 Git 仓库中意外泄露。

促进更好的协作

当团队成员处理同一个项目时,排除某些文件可以确保每个开发人员的本地环境设置、IDE 配置或个人偏好不会被提交到共享仓库,减少潜在冲突并使协作更加顺畅。

通过了解从 Git 提交中排除文件的好处,开发人员可以维护一个更高效、安全的 Git 仓库,从而改善项目管理和协作。

创建一个.gitignore 文件

创建一个 .gitignore 文件是一个简单直接的过程。你既可以手动创建该文件,也可以使用 Git 的内置功能来生成一个基本的 .gitignore 文件。

手动创建

  1. 打开一个文本编辑器,并在你的 Git 仓库的根目录中创建一个名为 .gitignore 的新文件。
  2. 添加你想要从仓库中排除的文件和目录的模式。例如:
## 编译后的源文件
*.com
*.class
*.dll
*.exe
*.o
*.so

## 日志文件
*.log

## 临时文件
*.swp
*.swo
  1. 保存 .gitignore 文件。

使用 Git 的模板

Git 为各种编程语言和开发环境提供了一组预定义的 .gitignore 模板。你可以将这些模板作为起点,然后根据项目需求进行定制。

  1. 打开一个终端,并导航到你的 Git 仓库。
  2. 运行以下命令,根据你正在使用的编程语言或环境生成一个基本的 .gitignore 文件:
git init
git config --global core.excludesfile ~/.gitignore_global
git config --global --list

这将在你的主目录中创建一个全局的 .gitignore_global 文件,并将其设置为你所有 Git 仓库的默认 .gitignore 文件。

  1. 根据需要自定义生成的 .gitignore 文件。

通过创建一个 .gitignore 文件,你可以有效地管理应从 Git 仓库中排除的文件和目录,确保一个干净且高效的版本控制系统。

排除文件和目录的模式

.gitignore 文件使用特定模式来定义哪些文件和目录应从 Git 仓库中排除。这些模式遵循一组规则和语法,可实现灵活且强大的文件排除功能。

语法和模式

  1. 字面文件名:你可以指定要忽略的精确文件名,例如 file.txt
  2. 文件扩展名:你可以使用 *.ext 来忽略具有特定扩展名的所有文件,例如 *.log
  3. 目录:要忽略整个目录及其内容,使用尾随斜杠,例如 tmp/
  4. 通配符:你可以使用通配符来匹配多个文件或目录。* 字符匹配任意数量的字符,? 字符匹配单个字符。
    • 示例:*.txt 将匹配所有文本文件,而 file?.txt 将匹配 file1.txtfile2.txt 等。
  5. 取反:你可以通过在模式前加上感叹号(!)来取反该模式。当你想要排除特定文件或目录,但包含某些例外情况时,这会很有用。
    • 示例:!important.txt 将包含 important.txt 文件,即使它与先前的模式匹配。

示例.gitignore 模式

以下是 .gitignore 文件中常用的一些模式:

模式 描述
*.class 忽略所有 Java 编译后的类文件
build/ 忽略整个 build 目录
log/*.log 忽略 log 目录中的所有 .log 文件
!important.txt 即使 important.txt 与先前的模式匹配,也将其包含在内
config.env 忽略 config.env 文件
*.swp 忽略所有 Vim 交换文件

通过理解这些模式和语法,你可以有效地自定义 .gitignore 文件,以满足项目和开发环境的特定需求。

排除特定文件和文件类型

除了使用模式来排除文件和目录外,.gitignore 文件还允许你指定应被忽略的单个文件或文件类型。

排除特定文件

要排除特定文件,只需将文件名添加到 .gitignore 文件中。例如,要排除 api_key.txt 文件,你可以添加以下行:

api_key.txt

排除文件类型

要排除特定类型的所有文件,可以使用文件扩展名模式。例如,要忽略所有 .log 文件,你可以添加以下行:

*.log

这将排除任何具有 .log 扩展名的文件,无论其文件名如何。

排除目录

要排除整个目录及其内容,可以使用目录名后跟正斜杠(/)。例如,要排除 build/ 目录,你可以添加以下行:

build/

这将排除 build 目录及其内的所有文件和子目录。

排除特定目录

你还可以在更大的目录结构中排除特定目录。例如,要排除 build/ 目录内的 tmp/ 目录,你可以添加以下行:

build/tmp/

通过组合这些技术,你可以有效地从 Git 仓库中排除特定文件、文件类型和目录,确保只跟踪和提交必要的文件。

覆盖.gitignore 规则

虽然 .gitignore 文件是用于从 Git 仓库中排除文件和目录的强大工具,但有时你可能需要覆盖这些规则,并包含之前被忽略的特定文件或目录。

! 取反运算符

!(感叹号)可用于 .gitignore 文件中,以取反一个模式,并包含原本会被忽略的文件或目录。

例如,假设你有以下 .gitignore 文件:

*.log
!important.log

在这种情况下,除了 important.log 文件会被包含在仓库中,所有 .log 文件都会被忽略。

--force 选项

另一种覆盖 .gitignore 规则的方法是使用 git add --force 命令。即使文件与 .gitignore 文件中的模式匹配,此命令也会将该文件添加到暂存区。

例如,要将 api_key.txt 文件添加到仓库中,即使它列在 .gitignore 文件中,你可以运行以下命令:

git add --force api_key.txt

这会将 api_key.txt 文件添加到暂存区,并会包含在下一次提交中。

--no-ignore 选项

git add --no-ignore 命令也可用于覆盖 .gitignore 规则。即使文件与 .gitignore 文件中的模式匹配,此命令也会将该文件添加到暂存区,并且还会将该文件添加到 .gitignore 文件中。

例如,要将 temp.txt 文件添加到仓库并将其添加到 .gitignore 文件中,你可以运行以下命令:

git add --no-ignore temp.txt

这会将 temp.txt 文件添加到暂存区,并将其添加到 .gitignore 文件中,以便在未来的提交中它会被忽略。

通过了解这些覆盖 .gitignore 规则的技术,你可以确保你的 Git 仓库包含必要的文件,即使它们之前被排除了。

管理.gitignore 的最佳实践

为了有效地管理 .gitignore 文件并确保拥有一个干净且高效的 Git 仓库,请考虑以下最佳实践:

保持.gitignore 文件为最新状态

随着项目的发展,定期审查和更新 .gitignore 文件。当引入新的文件类型或目录时,务必将它们添加到 .gitignore 文件中,以维护一个组织良好的仓库。

使用全局.gitignore

除了特定于项目的 .gitignore 文件外,你还可以维护一个适用于所有 Git 仓库的全局 .gitignore 文件。这有助于简化排除常见文件类型(如编辑器备份文件或编译后的二进制文件)的过程。

要设置全局 .gitignore 文件,请在终端中运行以下命令:

git config --global core.excludesfile ~/.gitignore_global

这将在你的主目录中创建一个全局 .gitignore_global 文件,并将其设置为所有 Git 仓库的默认 .gitignore 文件。

记录.gitignore 文件

考虑在 .gitignore 文件中添加注释,以解释每个模式或规则的用途。这可以帮助其他团队成员理解排除操作背后的原因,并随着时间的推移更轻松地维护该文件。

使用.gitignore 模板

Git 为各种编程语言和开发环境提供了一组预定义的 .gitignore 模板。这些模板可以作为你项目 .gitignore 文件的起点,然后你可以根据需要进行定制。

在.gitignore 上进行协作

如果你正在处理团队项目,在 .gitignore 文件上进行协作是一个好习惯。这可确保所有团队成员使用相同的排除规则集,减少意外提交不需要的文件的可能性。

通过遵循这些最佳实践,你可以有效地管理 .gitignore 文件,并维护一个干净、高效且协作良好的 Git 仓库。

解决.gitignore 问题

虽然 .gitignore 文件通常很容易使用,但有时你可能会遇到问题或意外行为。以下是一些常见问题及其解决方案:

文件未被忽略

如果你发现文件没有按预期被忽略,可以尝试以下操作:

  1. 检查.gitignore 语法:确保 .gitignore 文件中的模式正确且遵循正确的语法。

  2. 验证.gitignore 位置:确保 .gitignore 文件位于正确的目录中(通常是 Git 仓库的根目录)。

  3. 使用 git status 命令:运行 git status 查看未被忽略的文件是否被列出。这可以帮助你识别未被忽略的具体文件。

  4. 清除 Git 缓存:如果 .gitignore 文件已更新,你可能需要清除 Git 缓存以应用新规则。运行以下命令:

    git rm -r --cached.
    git add.
    git commit -m "Rebuild.gitignore"

    这将从 Git 索引中删除所有文件,然后重新添加它们,应用新的 .gitignore 规则。

被忽略的文件出现在 git status

如果你发现被忽略的文件仍出现在 git status 输出中,可以尝试以下操作:

  1. 检查未跟踪的文件:确保这些文件尚未被 Git 跟踪。已经被跟踪的被忽略文件仍会出现在 git status 中。
  2. 使用 --ignored 选项:运行 git status --ignored 查看所有被忽略文件的列表,包括未被跟踪的文件。
  3. 使用 git clean 命令git clean 命令可用于从工作目录中删除未跟踪的文件。运行 git clean -n 预览将被删除的文件,然后运行 git clean -f 删除它们。

通过了解这些常见问题及其解决方案,你可以有效地排查和管理你的 .gitignore 文件,以维护一个干净且有条理的 Git 仓库。

总结

在本全面教程中,你已经学会了如何使用.gitignore 文件有效地从 Git 提交中排除文件和目录。通过了解其好处、创建和管理.gitignore 规则以及遵循最佳实践,你现在可以维护一个干净且有条理的仓库,确保只跟踪和提交必要的文件。请记住,掌握.gitignore 文件对于任何基于 Git 的项目来说都是一项关键技能,这里学到的知识将帮助你简化版本控制工作流程并提升整体开发体验。