如何检查 Git 仓库是否有未跟踪文件

GitGitBeginner
立即练习

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

简介

在这个实验中,你将学习如何识别 Git 仓库中的未跟踪文件。了解未跟踪文件对于管理项目状态以及确保只有相关文件被纳入版本控制至关重要。

我们将首先使用基础的 git status 命令来列出未跟踪文件,并理解其输出结果。接着,我们将探索 git ls-files --others 命令,它提供了一种更直接的方式来列出未跟踪文件。最后,我们将简要介绍在这个过程中如何处理被忽略的文件。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/SetupandConfigGroup(["Setup and Config"]) git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git/SetupandConfigGroup -.-> git/config("Set Configurations") git/BasicOperationsGroup -.-> git/status("Check Status") subgraph Lab Skills git/config -.-> lab-560093{{"如何检查 Git 仓库是否有未跟踪文件"}} git/status -.-> lab-560093{{"如何检查 Git 仓库是否有未跟踪文件"}} end

运行 git status 命令列出未跟踪文件

在这一步中,你将学习如何使用 git status 命令来查看项目目录中哪些文件未被 Git 跟踪。这是了解仓库状态的基础命令。

首先,确保你位于项目目录中。如果你按照上一个实验的步骤操作,你应该位于 ~/project/my-time-machine 目录下。你可以使用 pwd 命令来验证当前所在的目录:

pwd

输出结果应该类似于:

/home/labex/project/my-time-machine

现在,让我们在这个目录中创建一个新文件。我们将其命名为 notes.txt

echo "Some random notes" > notes.txt

此命令创建了一个名为 notes.txt 的文件,并将文本 "Some random notes" 写入其中。

现在,让我们运行 git status 命令,看看 Git 如何识别这个新文件:

git status

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

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   message.txt

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

no changes added to commit (use "git add" and/or "git commit -a")

注意 "Untracked files:" 部分。Git 告知我们 notes.txt 是一个未跟踪的文件。这意味着 Git 能识别该文件,但目前并未对其版本进行管理。除非你明确指示,否则 Git 不会将此文件包含在提交中。

了解未跟踪文件很重要,因为这有助于你保持仓库的整洁,只跟踪属于项目的文件。临时文件、构建产物或个人笔记通常会被设置为未跟踪状态。

使用 git ls-files --others 进行检查

在上一步中,我们使用 git status 命令查看了未跟踪的文件。虽然 git status 能很好地展示仓库的整体状态,但有时你可能只想要一个简单的未跟踪文件列表。这时,git ls-files --others 命令就派上用场了。

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

现在,运行以下命令:

git ls-files --others

你应该会看到如下输出:

notes.txt

此命令会列出工作目录中所有未被 Git 跟踪的文件。与 git status 的详细输出相比,这是一种更直接的查看未跟踪文件的方式。

--others 选项指示 git ls-files 仅列出不属于 Git 索引(即未被跟踪)的文件。这在编写脚本时很有用,或者当你只需要快速查看项目中有哪些新的未跟踪文件时也很方便。

你可能会疑惑,为什么要使用 git ls-files --others 而不是 git status。虽然 git status 能提供包括已修改和已暂存文件在内的全面视图,但 git ls-files --others 专门用于列出未跟踪的文件。当你想以编程方式处理或管理未跟踪文件时,这会非常有用,例如在清理临时文件的脚本中。

结合忽略文件检查

在前面的步骤中,你学习了如何使用 git statusgit ls-files --others 来识别未跟踪的文件。然而,有时你会有一些文件是你 有意 不想让 Git 跟踪的,比如临时文件、构建输出或者包含敏感信息的配置文件。Git 允许你在 .gitignore 文件中指定这些文件。

在这一步中,你将创建一个 .gitignore 文件,并了解它如何影响 git statusgit ls-files --others 的输出。

首先,确保你位于 ~/project/my-time-machine 目录中。

现在,让我们创建一个想要忽略的文件。我们将其命名为 temp.log

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

再次运行 git status

git status

你应该会看到 notes.txttemp.log 都被列为未跟踪文件:

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   message.txt

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

no changes added to commit (use "git add" and/or "git commit -a")

现在,让我们创建一个 .gitignore 文件,并将 temp.log 添加到其中。使用 nano 编辑器来创建和编辑该文件:

nano .gitignore

nano 编辑器中,输入以下内容:

temp.log

按下 Ctrl + X,然后按 Y 保存,再按 Enter 确认文件名。

现在,再次运行 git status

git status

这次,temp.log 应该不再出现在“Untracked files:”列表中:

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   message.txt

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

no changes added to commit (use "git add" and/or "git commit -a")

现在,Git 知道要忽略 temp.log 了。让我们看看 git ls-files --others 会受到怎样的影响:

git ls-files --others

现在输出应该只显示 notes.txt

notes.txt

默认情况下,git ls-files --others 不会 列出被忽略的文件。这通常是你期望的行为,因为你通常不想看到那些你明确告诉 Git 要忽略的文件。

如果你 确实 想同时查看被忽略的文件和其他未跟踪的文件,可以在 git ls-files --others 中使用 --ignored 选项:

git ls-files --others --ignored

现在输出将同时包含未跟踪和被忽略的文件:

.gitignore
notes.txt
temp.log

请注意,在你添加并提交 .gitignore 文件之前,它本身也是一个未跟踪的文件。

了解如何使用 .gitignore 对于保持仓库的整洁以及专注于实际的项目文件至关重要。它可以防止意外提交那些不应该进行版本控制的文件。

总结

在本次实验中,你学习了如何识别 Git 仓库中的未跟踪文件。首先,你使用了基础的 git status 命令,它能全面展示仓库的状态,其中包含专门列出未跟踪文件的部分。这个命令对于了解哪些文件目前未被 Git 管理至关重要。

接着,你探索了 git ls-files --others 命令,将其作为列出未跟踪文件的另一种方法。该命令提供了更简洁的输出,仅列出未跟踪的文件本身。虽然第三步的完整内容未给出,但标题表明这一步会将此检查与对忽略文件的考虑相结合,忽略文件是通过 .gitignore 文件有意排除在 Git 跟踪之外的文件。