Git怎么保留空文件夹_Git提交空目录的gitkeep方法【基础】
Git不跟踪空目录,因其只记录含文件的目录结构;最可靠方案是在空目录中添加.gitkeep空文件并提交。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
简单来说,Git本身并不跟踪空目录。所谓的“保留空文件夹”,其实是一种变通手段——而其中最可靠、也最通用的做法,就是在空目录里放一个名为 .gitkeep 的空文件。
为什么 Git 不保存空文件夹?
这得从Git的设计逻辑说起。Git的核心是记录文件(blob)和目录结构(tree),但一个目录要想在版本历史中“存在”,它里面至少得有一个被跟踪的文件。空目录没有对应的文件对象,Git在扫描时就会直接忽略它。所以,这不是什么bug,而是Git的既定设计。
很多开发者第一次遇到时都会困惑:明明在本地建了个空目录,但git status毫无反应,git add mydir/也加不进去,最后git commit提交完,远程仓库里压根找不到这个目录的影子。
用 .gitkeep 是最稳妥的方案
需要明确的是,.gitkeep并非Git的内置功能,而是社区长期实践后约定俗成的命名惯例。当然,文件名可以任意,但.gitkeep的识别度最高,工具链的兼容性也最好。
具体操作很简单:
- 在目标空目录中创建一个空文件:
touch mydir/.gitkeep - 确保这个文件没有被项目的
.gitignore规则屏蔽(默认不会,但如果项目有忽略所有点号开头文件的规则,就需要检查一下) - 执行添加和提交:
git add mydir/.gitkeep→git commit -m "add .gitkeep to keep mydir"
完成之后,mydir/这个目录就会稳定地出现在工作区、暂存区和版本历史里了,并且除了.gitkeep之外,它依然保持“空”的状态。
其他方法为什么不太推荐?
有人可能会想:能不能用.gitignore文件来“反向操作”呢?答案是否定的。.gitignore只控制忽略逻辑,它本身并不能让Git去跟踪一个目录。试图在里面写!/mydir/或!mydir/**都是无效的,因为目录里根本没有可以被“取消忽略”的文件。
那用别的文件名行不行?比如.empty或者放个README.md?技术上当然可以,但存在一些潜在风险:
README.md这类有实际含义的文件,很容易被后续编辑或覆盖,从而破坏了“这只是个空目录占位符”的语义。- 一些CI/CD工具或自动化脚本可能会识别特定的文件名,而
.gitkeep是业界最广泛认可的占位符标识。 - 像VS Code这样的主流IDE,通常会对
.gitkeep文件进行默认隐藏或低优先级渲染,这样就不会干扰日常的开发视图。
注意:.gitkeep 不是魔法,它只是普通文件
说到底,.gitkeep就是一个普通的空文件,它不需要特殊权限,也不影响Git的性能。但有一点必须牢记:它必须被git add过,并且确保没有被.gitignore拦截。
还有一个容易被忽略的后续操作:如果这个目录以后真的需要存放实际文件了,那么.gitkeep文件通常应该被手动删除。否则,它会显得多余,也背离了我们最初只是想保留一个空目录结构的本意。
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
同类文章
VSCode配置NestJS框架 后端架构VSCode快速生成模块
VSCode生成NestJS模块和控制器后无效,主因是未手动完成三步注册:未将模块导入AppModule、未在模块controllers数组声明控制器、未正确配置tsconfig json和launch json的sourceMap与outFiles路径。 VSCode确实能一键生成NestJS的模
如何在VSCode中通过Remote-SSH连接使用非22默认端口号的内网或公有云服务器
VSCode Remote-SSH连接失败?问题根源与精准排查指南 先说一个核心判断:很多开发者遇到的Remote-SSH连接失败,其实并非插件本身有问题,而是配置环节的“想当然”导致的。 VSCode默认只认22端口,如果你改了端口却没在正确的地方声明,它根本不会自动去识别那些穿透映射或自定义的S
Composer怎么升级所有依赖包_安全执行Update更新策略【风险防范】
Composer依赖升级:别让一次“更新”毁了你的项目 在PHP开发中,一个常见的误解是:composer update 等同于一次安全的依赖升级。事实恰恰相反,这其实是一个高风险操作。它的本质并非简单的“更新”,而是重新计算整棵依赖关系树。这个过程可能悄无声息地升级Symfony、PHPUnit等
VSCode快速合并Git冲突_利用内置合并编辑器高效处理
VSCode合并编辑器需手动保存并git add才能更新状态;CURRENT为当前分支修改(rebase时非HEAD),INCOMING为对方改动;Accept Both Changes仅拼接代码,不校验逻辑,易致重复定义或缺失依赖;解决冲突须清除全部标记,否则仍显示“Conflicted”。 这里
Composer如何查看安装包的详细依赖链
Composer依赖链排查:从“它依赖谁”到“谁用了它”的完整指南 在PHP项目里管理依赖,有时候就像理清一团毛线——你知道所有线头都在vendor 目录里,但具体哪条线连着哪个钩子,光看composer json可不够。尤其是当版本冲突、依赖替换(replace)或虚拟包(provide)出现时,
- 日榜
- 周榜
- 月榜
1
2
3
4
5
6
7
8
9
10
相关攻略
2015-03-10 11:25
2015-03-10 11:05
2021-08-04 13:30
2015-03-10 11:22
2015-03-10 12:39
2022-05-16 18:57
2025-05-23 13:43
2025-05-23 14:01
热门教程
- 游戏攻略
- 安卓教程
- 苹果教程
- 电脑教程
热门话题

