Hacker News 中文摘要

RSS订阅

不要创建.gitkeep文件,改用.gitignore(2023) -- Don't create .gitkeep files, use .gitignore instead (2023)

文章摘要

文章建议不要使用.gitkeep文件来确保Git保留空目录,而是推荐在.gitignore文件中添加规则来忽略目录内除特定文件外的所有内容,这样更简洁高效。

文章总结

Git:不要创建.gitkeep文件,改用.gitignore更高效

文章核心内容:

在Git版本控制中,由于Git仅跟踪文件而不跟踪目录,开发者常需要特殊方法来确保空目录能被保留在仓库中。作者Adam Johnson对比了两种主流方案:


传统方案:.gitkeep的局限性

  1. 操作步骤

    • 在目标目录(如build/)创建空文件.gitkeep
    • 在项目级.gitignore中添加双重规则: gitignore /build/* !/build/.gitkeep
  2. 缺点

    • 需同时维护两个文件
    • 目录重命名时需同步更新.gitignore,易遗漏
    • .gitkeep非Git官方约定,可能引发团队困惑

更优方案:单文件.gitignore方案

  1. 实现方法

    • 仅在目标目录创建.gitignore文件,内容为: gitignore * !.gitignore
    • 通过命令快速创建: bash echo '*\n!.gitignore' > build/.gitignore
  2. 优势

    • 单文件即可实现目录跟踪
    • 目录重命名时无需额外操作
    • 采用Git原生支持的标准文件

作者建议:优先选择.gitignore方案,其简洁性、可维护性和标准化程度更高。该技巧尤其适用于需要保留构建目录(如build/)等场景。

注:文末推广内容及无关标签已省略

评论总结

总结评论内容:

  1. 关于.gitkeep的争议:
  • 支持方认为.gitkeep能明确表达意图(评分9:"communicates intent better")
  • 反对方认为应通过构建脚本创建目录(评分19:"fix your build scripts";评分17:"use a build script")
  1. 技术实现讨论:
  • 有评论指出可以强制添加.gitignore文件(评分6:"git add -f .gitignore")
  • 另有建议使用README.md替代(评分21:"favorite Git keep filename is README.md")
  1. 使用场景分歧:
  • 支持空目录的场景:Docker挂载(评分11)、测试数据(评分20)
  • 反对空目录的观点:build目录应可随时删除(评分18)
  1. .gitkeep起源:
  • 最早可追溯到2010年Stack Overflow回答(评分8)
  • 部分用户表示首次听说(评分17)
  1. 代码可读性争议:
  • 支持清晰表达意图(评分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)