.gitignore 与 .gitkeep 有什么区别

.gitignore 是 Git 原生功能,按规则忽略不想跟踪的文件;.gitkeep 只是社区约定的空文件,用来让 Git 能够提交空目录(Git 不跟踪空目录)。一个管"别跟踪",一个管"保留目录"。

最佳实践
Git 分支协作与合并示意

两者用途相反:.gitignore 是 Git 的内置机制,告诉 Git"不要跟踪这些文件";.gitkeep 不是 Git 功能,只是社区惯例——放一个名叫 .gitkeep 的空文件来"保住"一个本来会被 Git 忽略的空目录。

.gitignore:排除文件

node_modules/
*.log
.env
dist/
  • Git 原生支持,按模式匹配路径;
  • 只影响未跟踪文件,已跟踪文件不受影响;
  • 每个目录都可以有自己的 .gitignore,规则只作用于该目录树下。

.gitkeep:保留空目录

Git 只跟踪文件,空目录无法提交。但项目里常需要保留目录结构(如 logs/、uploads/、tmp/)。惯例做法:

mkdir logs
touch logs/.gitkeep
# 配合忽略目录内容但保留 .gitkeep
logs/*
!logs/.gitkeep

这样目录结构进了仓库,运行期产生的日志文件又不会污染版本库。

注意

  • 名字叫什么都行:.gitkeep 只是流传最广的约定,用 .keep、README.md(说明目录用途)效果相同,后者甚至更友好;
  • 如果目录里迟早会有被跟踪的文件,就不需要 .gitkeep。

常见问题(FAQ)

Q:.gitkeep 里要写内容吗?

不用,空文件即可。它的存在本身就是全部意义。

Q:为什么提交了空目录同事却看不到?

因为空目录根本没被提交——Git 不跟踪目录。必须放占位文件。

Q:全局忽略规则怎么配?

git config --global core.excludesFile ~/.gitignore_global,把 .DS_Store、.idea/ 这类个人环境文件全局排除,避免每个项目重复写。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台