使用 Gitignore 忽略文件

GitBeginner
立即练习

简介

在软件开发过程中,项目目录可能会被不应共享的文件弄得杂乱不堪,例如:

  • 临时文件:由编辑器或操作系统生成的文件(例如 .DS_Store)。
  • 构建产物:编译生成的代码(例如 .exe、.class)。
  • 日志文件:记录程序运行情况的文件(例如 debug.log)。
  • 敏感信息:API 密钥或密码(绝对不要提交这些内容!)。

Git 提供了一个名为 .gitignore 的功能。它是一个简单的「不要跟踪」规则列表。如果文件匹配列表中的某条规则,Git 默认会将其保持为未跟踪状态。

这是针对工作树的策略机制。它告诉 Git:哪些未跟踪文件应被视为普通的后台噪声,而不是等待添加的源文件。

这不仅是为了保持整洁。配置良好的 .gitignore 可以减少噪声、避免仓库过大,并防止意外提交敏感信息或特定机器上的无关文件。

在本实验中,你将:

  1. 创建一个需要忽略的「垃圾」文件。
  2. 配置 .gitignore 文件。
  3. 验证 Git 是否成功忽略该垃圾文件。

创建日志文件

首先,创建一个代表「垃圾」数据的文件。假设你的应用每次运行时都会生成一个日志文件。为了调试,你需要将该文件保留在本地计算机上,但不希望与团队共享,也不希望将其保存到版本历史中。

进入项目目录:

cd ~/project

创建名为 debug.log 的文件,并写入一些示例内容:

echo "System started at $(date)" > debug.log

确认文件已经存在:

ls

此时,如果运行 git status,Git 会将该文件识别为「未跟踪」文件,并不断提示你添加它。

对于 Git 已发现但尚未被忽略的文件,这是正常行为。Git 实际上是在询问你是否要让该文件成为仓库的一部分。

创建 .gitignore 文件

如果要告诉 Git 不要提示某些文件,需要创建一个名为 .gitignore 的特殊配置文件。

在项目根目录中创建该文件:

touch .gitignore

确认文件已经创建。注意,由于文件名以点号开头,它是隐藏文件:

ls -a

.gitignore 是一个普通文本文件。通常,应该将 .gitignore 文件本身提交到仓库,这样团队中的每个人都能共享相同的忽略规则。

这里需要区分两者:被忽略的文件通常是本地生成的产物,而 .gitignore 本身通常属于项目配置,应纳入版本控制。

配置忽略规则

现在,添加一条忽略所有日志文件的规则。

可以使用通配符 * 表示「所有以 .log 结尾的内容」。

将模式 *.log 添加到 .gitignore 文件中:

echo "*.log" > .gitignore

确认文件内容:

cat .gitignore

输出:

*.log

这一行会告诉 Git:「如果某个文件的名称以 .log 结尾,就忽略该目录及其所有子目录中的这个文件。」

忽略规则基于模式匹配,并不是只针对某个文件的指令。因此,一个简短的 .gitignore 文件就可以管理多类自动生成的文件或不需要的文件。

验证忽略状态

测试刚才的规则是否生效。

运行 git status:

git status

分析输出:

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    .gitignore

等等!debug.log 到哪里去了?

它已经从列表中消失了!这表示 Git 已成功将其忽略。Git 现在只提示 .gitignore 文件本身(之后应该提交该文件),而 debug.log 对 Git 不可见。

这就是未跟踪文件与已忽略文件之间的实际区别。Git 仍会建议添加未跟踪文件,而被忽略的文件则会被有意排除,不再提示。

如果想进一步确认,可以使用 check-ignore 命令询问「为什么会忽略这个文件」:

git check-ignore -v debug.log

输出:

.gitignore:1:*.log debug.log

这表示:「文件 debug.log 被忽略,是因为 .gitignore 第 1 行中的规则 *.log。」

总结

在本实验中,你学习了如何保持仓库整洁。

关键要点:

  1. **.gitignore**:列出 Git 应忽略的匹配模式的文本文件。
  2. 通配符:使用 * 匹配多个文件(例如 *.log)。
  3. 未跟踪与已忽略:在 Git 看来,被忽略的文件就像不存在一样,但它仍然存在于磁盘中。

这个简单的文件功能很强大。它可以防止你意外提交临时文件、二进制文件或敏感密钥,让项目保持专业性和安全性。