如何检查文件是否被 Git 忽略

GitGitBeginner
立即练习

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

简介

在这个实验中,你将学习如何使用 git check-ignore 命令来确定一个文件是否被 Git 忽略。你将创建一个 .gitignore 文件,向其中添加规则,然后使用 git check-ignore 来验证哪些文件被忽略以及被忽略的原因。

你还将探索 .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/BranchManagementGroup(["Branch Management"]) git/SetupandConfigGroup -.-> git/git("Show Version") git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/clean("Clean Workspace") git/BranchManagementGroup -.-> git/checkout("Switch Branches") subgraph Lab Skills git/git -.-> lab-560027{{"如何检查文件是否被 Git 忽略"}} git/add -.-> lab-560027{{"如何检查文件是否被 Git 忽略"}} git/status -.-> lab-560027{{"如何检查文件是否被 Git 忽略"}} git/clean -.-> lab-560027{{"如何检查文件是否被 Git 忽略"}} git/checkout -.-> lab-560027{{"如何检查文件是否被 Git 忽略"}} end

运行 git check-ignore 检查文件

在这一步中,你将学习如何使用 git check-ignore 命令。这个命令对于理解 Git 为何忽略某些文件或目录非常有用,它能帮助你调试 .gitignore 文件。

首先,确保你处于项目目录中。打开终端并输入:

cd ~/project/my-time-machine

现在,创建一个你期望 Git 忽略的文件。我们将创建一个名为 temp.log 的文件。通常,日志文件在 Git 仓库中会被忽略。

echo "This is a temporary log file." > temp.log

接下来,创建一个 .gitignore 文件,并添加一个规则来忽略 .log 文件。

echo "*.log" > .gitignore

现在,你可以使用 git check-ignore 来查看 Git 是否忽略了 temp.log 文件。

git check-ignore temp.log

如果 Git 忽略了该文件,命令将输出 .gitignore 文件中与该文件匹配的规则。你应该会看到类似以下的输出:

.gitignore:1:*.log	temp.log

这个输出表明,文件 temp.log 被忽略是因为 .gitignore 文件第 1 行的规则 *.log

如果文件未被忽略,该命令将不会产生任何输出。

理解 git check-ignore 对于有效管理项目文件至关重要。它能防止你意外地将不想纳入仓库的文件(如临时文件、构建产物或敏感配置文件)提交到仓库中。

检查 .gitignore 规则

在这一步中,你将探索 .gitignore 中的不同规则如何影响哪些文件会被忽略。.gitignore 文件使用特定的规则来告知 Git 哪些文件或目录不应被纳入版本控制。

确保你仍处于 ~/project/my-time-machine 目录中。

让我们添加一些新文件并修改 .gitignore 文件,以了解不同规则的作用。

首先,创建一些新文件:

mkdir build
echo "This is a build artifact." > build/output.txt
echo "Another log file." > error.log
echo "A temporary file." > temp.dat
echo "A configuration file." > config.ini

现在,编辑 .gitignore 文件以包含更多规则。你可以使用 nano 编辑器来完成此操作。

nano .gitignore

nano 编辑器中,你应该会看到 *.log。在其下方添加以下几行:

build/
*.dat
config.ini

你的 .gitignore 文件现在应该如下所示:

*.log
build/
*.dat
config.ini

Ctrl + X,然后按 Y,最后按 Enter 保存并退出 nano

现在,使用带有 -v 标志的 git check-ignore 命令,查看是哪个规则忽略了每个文件。-v 标志会提供详细输出,显示匹配的规则和源文件(在这种情况下是 .gitignore)。

git check-ignore -v temp.log error.log build/output.txt temp.dat config.ini

你应该会看到类似以下的输出:

.gitignore:1:*.log	temp.log
.gitignore:1:*.log	error.log
.gitignore:2:build/	build/output.txt
.gitignore:3:*.dat	temp.dat
.gitignore:4:config.ini	config.ini

此输出证实了:

  • temp.logerror.log*.log 规则忽略。
  • build/output.txt 被忽略是因为整个 build/ 目录被忽略。
  • temp.dat*.dat 规则忽略。
  • config.iniconfig.ini 规则忽略。

理解这些规则对于保持仓库的整洁,使其仅关注你想要跟踪的文件至关重要。

测试未被忽略的文件

在这一步中,你将使用 git check-ignore 命令来确认那些未被 .gitignore 文件忽略的文件不会产生任何输出。这有助于你巩固对该命令工作原理的理解,以及如何验证 Git 是否正在跟踪你期望它跟踪的文件。

确保你处于 ~/project/my-time-machine 目录中。

在之前的实验中,你已经创建了 message.txt 文件。这个文件并未列在 .gitignore 文件中,因此 Git 不应忽略它。

让我们对 message.txt 文件使用 git check-ignore 命令:

git check-ignore message.txt

正如预期的那样,这个命令应该不会产生任何输出。这表明 message.txt 没有被 .gitignore 文件中的任何规则或其他忽略规则所忽略。

现在,创建另一个你不打算忽略的文件:

echo "This file should be tracked." > important_file.txt

然后检查它的忽略状态:

git check-ignore important_file.txt

同样,你应该看不到任何输出,这证实了 important_file.txt 没有被忽略。

最后,使用 git status 命令来查看 Git 如何识别这些文件。

git status

你应该会看到类似以下的输出:

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   .gitignore

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

nothing added to commit but untracked files present (use "git add" to track)

注意,important_file.txtmessage.txt 被列在“Untracked files”下面。这意味着 Git 能识别它们,但目前并未跟踪它们的更改。被忽略的文件(temp.logerror.logbuild/output.txttemp.datconfig.ini)没有列在这里,因为 Git 被明确告知要忽略它们。

这一步强化了这样一个概念:git check-ignore 是一个用于验证忽略规则的工具,未被忽略规则匹配的文件在 git status 中会显示为“Untracked”,直到你使用 git add 命令明确将它们添加到跟踪列表中。

总结

在本次实验中,你学习了如何使用 git check-ignore 命令来确定某个特定文件是否被 Git 忽略。你练习了创建 .gitignore 文件、向其中添加规则,然后使用 git check-ignore 命令来验证预期要忽略的文件确实被忽略了。git check-ignore 命令的输出帮助你理解了 .gitignore 文件中的哪条规则导致了文件被忽略。

你还探索了 .gitignore 文件中的不同规则如何影响哪些文件会被忽略。通过创建各种文件并使用不同规则修改 .gitignore 文件,你更好地理解了 Git 如何解释这些规则,从而将文件和目录排除在版本控制之外。这些知识对于有效管理哪些文件会被纳入 Git 仓库至关重要。