如何向 Git 仓库提交空目录

Git 不跟踪空目录,惯例做法是在目录里放一个 .gitkeep 空文件再提交;如果目录内容应被忽略,配合 .gitignore 写 logs/ 与 !logs/.gitkeep 两条规则,保留目录结构同时忽略产物。

最佳实践
Git 提交历史与版本恢复示意

Git 从设计上就不跟踪空目录(它只跟踪文件),惯例解法是在目录里放一个占位文件——社区通称 .gitkeep——然后正常提交。目录内容需要忽略时,配合 .gitignore 的取反规则即可。

标准做法

mkdir uploads
touch uploads/.gitkeep

git add uploads/.gitkeep
git commit -m "保留 uploads 目录结构"

配套 .gitignore:保留目录但忽略内容

uploads/*
!uploads/.gitkeep

这样队友 clone 后目录存在,运行期产生的上传文件又不会进版本库。

占位文件叫什么?

  • .gitkeep:流传最广的约定(非官方);
  • .keep:一样的意思,更短;
  • README.md:写几句"这个目录干什么用",对新人更友好。

三者效果相同,团队统一即可。

常见问题(FAQ)

Q:为什么 Git 不支持空目录?

Git 的对象模型只有 blob(文件内容)、tree(目录条目)、commit 等类型,tree 通过条目指向 blob——没有文件的目录在模型里就没有存在形式。这是设计决策而非缺陷。

Q:构建时需要某些空目录存在,怎么自动化?

两种方式:提交 .gitkeep(推荐,clone 即得);或在构建脚本里 mkdir -p,写进 Makefile/CI 步骤。依赖 .gitkeep 的好处是开发者零配置。

Q:.gitkeep 会影响程序读写该目录吗?

不会,它就是个普通空文件。少数场景(如"遍历目录下所有文件处理"的程序)记得排除它。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台