简介
在软件开发过程中,项目目录可能会被不应共享的文件弄得杂乱不堪,例如:
- 临时文件:由编辑器或操作系统生成的文件(例如
.DS_Store)。 - 构建产物:编译生成的代码(例如
.exe、.class)。 - 日志文件:记录程序运行情况的文件(例如
debug.log)。 - 敏感信息:API 密钥或密码(绝对不要提交这些内容!)。
Git 提供了一个名为 .gitignore 的功能。它是一个简单的「不要跟踪」规则列表。如果文件匹配列表中的某条规则,Git 默认会将其保持为未跟踪状态。
这是针对工作树的策略机制。它告诉 Git:哪些未跟踪文件应被视为普通的后台噪声,而不是等待添加的源文件。
这不仅是为了保持整洁。配置良好的 .gitignore 可以减少噪声、避免仓库过大,并防止意外提交敏感信息或特定机器上的无关文件。
在本实验中,你将:
- 创建一个需要忽略的「垃圾」文件。
- 配置
.gitignore文件。 - 验证 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。」
总结
在本实验中,你学习了如何保持仓库整洁。
关键要点:
- **
.gitignore**:列出 Git 应忽略的匹配模式的文本文件。 - 通配符:使用
*匹配多个文件(例如*.log)。 - 未跟踪与已忽略:在 Git 看来,被忽略的文件就像不存在一样,但它仍然存在于磁盘中。
这个简单的文件功能很强大。它可以防止你意外提交临时文件、二进制文件或敏感密钥,让项目保持专业性和安全性。



