文章摘要
文章建议不要使用.gitkeep文件来确保Git保留空目录,而是推荐在.gitignore文件中添加规则来忽略目录内除特定文件外的所有内容,这样更简洁高效。
文章总结
Git:不要创建.gitkeep文件,改用.gitignore更高效
文章核心内容:
在Git版本控制中,由于Git仅跟踪文件而不跟踪目录,开发者常需要特殊方法来确保空目录能被保留在仓库中。作者Adam Johnson对比了两种主流方案:
传统方案:.gitkeep的局限性
操作步骤
- 在目标目录(如
build/)创建空文件.gitkeep - 在项目级
.gitignore中添加双重规则:gitignore /build/* !/build/.gitkeep
- 在目标目录(如
缺点
- 需同时维护两个文件
- 目录重命名时需同步更新
.gitignore,易遗漏 .gitkeep非Git官方约定,可能引发团队困惑
更优方案:单文件.gitignore方案
实现方法
- 仅在目标目录创建
.gitignore文件,内容为:gitignore * !.gitignore - 通过命令快速创建:
bash echo '*\n!.gitignore' > build/.gitignore
- 仅在目标目录创建
优势
- 单文件即可实现目录跟踪
- 目录重命名时无需额外操作
- 采用Git原生支持的标准文件
作者建议:优先选择.gitignore方案,其简洁性、可维护性和标准化程度更高。该技巧尤其适用于需要保留构建目录(如build/)等场景。
(注:文末推广内容及无关标签已省略)
评论总结
总结评论内容:
- 关于.gitkeep的争议:
- 支持方认为.gitkeep能明确表达意图(评分9:"communicates intent better")
- 反对方认为应通过构建脚本创建目录(评分19:"fix your build scripts";评分17:"use a build script")
- 技术实现讨论:
- 有评论指出可以强制添加.gitignore文件(评分6:"git add -f .gitignore")
- 另有建议使用README.md替代(评分21:"favorite Git keep filename is README.md")
- 使用场景分歧:
- 支持空目录的场景:Docker挂载(评分11)、测试数据(评分20)
- 反对空目录的观点:build目录应可随时删除(评分18)
- .gitkeep起源:
- 最早可追溯到2010年Stack Overflow回答(评分8)
- 部分用户表示首次听说(评分17)
- 代码可读性争议:
- 支持清晰表达意图(评分13:"intuitive and easy to understand")
- 反对过度技巧(评分13:"clever optimization tricks")
关键引用: - "communicates intent better"(评分9) - "fix your build scripts"(评分19) - "git add -f .gitignore"(评分6) - "favorite Git keep filename is README.md"(评分21) - "最早可追溯到2010年Stack Overflow回答"(评分8) - "intuitive and easy to understand"(评分13)