---
title: "为什么 .gitignore 看起来像个没有名字的文件？"
description: "从 .gitignore 的奇怪文件名讲起：Unix 里点只是普通字符，早期 ls 为跳过 . 和 .. 加的一行判断顺带隐藏了点开头文件，由此衍生出 dotfile 配置文化。"
date: 2026-04-30T10:10:00Z
canonical: https://xiaobox.github.io/p/2026-04-30-wei-shen-me-gitignore-kan-qi-lai-xiang-ge-mei-you-ming-zi-de-wen-jian/
author: 小盒子
categories: ["行业与思考"]
license: CC BY-NC-SA 4.0
license_url: https://creativecommons.org/licenses/by-nc-sa/4.0/
---

# 为什么 .gitignore 看起来像个没有名字的文件？

前两天我新建一个仓库，顺手把之前项目的 `.gitignore` 文件拷贝进来。然后我接了杯水，回来盯着 vscode 上的这个空项目以及这个 `.gitignore` 文件喝了口水，看着这个文件我突然想到，这文件名挺奇怪的。

`.gitignore`。

如果从我们习惯的 Windows 文件名视角看，一个文件大概长这样，`name.txt`。点前面是名字，点后面是后缀。

那 `.gitignore` 算什么？

点前面啥也没有，后面一长串。像是没有名字，只有后缀。

我用了 Git 这么多年，从来没认真想过这个问题。为什么不叫 `gitignore.txt`，或者 `ignore.git`，偏偏要在前面挂一个点？

后来研究了一下，发现还挺有意思。

在 Unix 世界里，点没有那么强的「分隔名字和后缀」的身份。它就是文件名里的一个普通字符。`README` 没后缀可以，`Makefile` 没后缀可以，`.gitignore` 前面带个点也可以。

所以 `.gitignore` 不是「空名字 + gitignore 后缀」。

它整个名字就是 `.gitignore`。

让这个点变得特殊的其实是终端里那个列出目录的命令，`ls`。

早期 Unix 里，每个目录都有两个特殊入口，一个叫 `.`，表示当前目录。一个叫 `..`，表示上一级目录。今天我们敲 `cd ..`，就是从这里来的。

但当时敲 `ls` 的时候，总能看到 `.` 和 `..`，有点碍眼（注意是早期，现在你得 ls -a）。你只是想看目录里有哪些文件，不想每次都看到 `.` 和 `..`。于是有工程师就想了个办法。

据贝尔实验室老工程师 Rob Pike 回忆，早期有人给 `ls` 加了一个判断，大概是这样，

```c
if (name[0] == '.') continue;
```

意思是，只要文件名第一个字符是点，就别显示了。

这行判断本来只是想跳过 `.` 和 `..`。但它顺便把所有点开头的文件都隐藏了。

于是从这一行代码，衍生出了一套 dotfile 文化。

后来的程序员一看，哦，点开头的文件默认不会出现在 `ls` 里，这不正适合放配置吗？于是 `.profile`、`.bashrc`、`.vimrc`、`.ssh`、`.config`，一堆东西开始往目录里放，`.gitignore` 也同理。

不过现在这堆文件，你得敲 `ls -a`，才能全部看到。

