如何保留空目录?.gitkeep 与 .gitignore 怎么选?

常规 Git add 和 checkout 流程通过目录中的文件保留目录结构。每个目录选一种占位方式:初始为空、未来会添加内容时可用 .gitkeep;需要持续忽略生成内容时可用 .gitignore。

1. 用占位文件保留待用目录

创建 uploads,并用编辑器新建空文件 uploads/.gitkeep,再暂存这个具体文件:

git add -- uploads/.gitkeep

检查索引是否列出 uploads/.gitkeep。.gitkeep 是命名惯例,Git 不会特殊处理;说明目录用途的 README 也可以。它不会自动忽略以后添加的文件。

git ls-files -- uploads/

2. 保留目录但忽略生成内容

另一种方案是在 uploads 中创建 .gitignore 作为占位文件,内容如下。* 忽略内容,!.gitignore 允许规则文件本身被跟踪。为这个目录选择该方案即可,不必同时采用 .gitkeep 方案。

规则文件本身纳入版本控制,因此目录中会包含这个文件。该方案会持续忽略后续文件,直到你调整规则。

*
!.gitignore

为什么用 ! 仍无法保留被忽略目录里的文件?

3. 验证选定方案

采用 .gitignore 方案时,暂存其规则文件:

git add -- uploads/.gitignore

创建 uploads/example.bin,检查其匹配规则:

git check-ignore -v -- uploads/example.bin

列出索引记录,应看到 uploads/.gitignore,而没有 example.bin。如果父级规则排除了 uploads 目录本身,先修正父级规则,让 Git 能读到目录内的 .gitignore。

git ls-files -- uploads/

如何忽略文件夹?folder/ 和 /folder/ 有什么区别?

准确行为与更多细节请参阅官方说明: Git 官方文档 · git add 官方文档