.gitignore 默认忽略一切

支持“.gitignore 默认忽略一切”的人认为,这能降低意外提交密钥、系统杂物或 IDE 产物的风险,尤其是在大家习惯性运行 `git add .` 时。批评者则反驳说,这种做法会让新文件在 `git status` 中不可见,增加遗漏重要源文件的概率,而且在协作场景中很脆弱。许多人更倾向于使用全局和项目级 .gitignore 模板、更有纪律的暂存方式(如 `git add -p`、避免使用 `git add .`),或者借助工具和 CI 检查来强制规范哪些内容应该或不应该被提交。

对“.gitignore 默认忽略一切”的总体反应

  • 许多人认为这很糟糕或过度:有可能忘记取消忽略重要文件、破坏构建/CI,以及让 git status 看不到缺失文件。
  • 支持者认为这是一种防御性的、“默认拒绝”/安全优先的策略,可防止意外提交密钥、垃圾文件或工具特有的杂物。
  • 有几条评论指出,它在某些场景下更有效(例如 Docker 构建上下文、Unity 实验、结构非常严格的仓库),而不太适合一般开发。

选择性暂存 vs 盲目 git add .

  • 一个强烈的主题是:避免盲目使用 git add . / git add -A
    • 提倡的替代方案包括:git add -ugit add -p、交互式暂存,以及在添加前后检查 git status
  • 有些人会把工作组织到让 git add . 也安全的程度(干净的工作树、单一且连贯的变更)。
  • 对可逆性的看法存在分歧:有些人认为“添加一切”很容易撤销;另一些人指出,很多用户并不知道或不会使用 git reset / git restore --staged

全局与本地忽略策略

  • 被广泛推荐的一种做法是使用用户级全局忽略(如 ~/.config/git/ignore 或类似位置),用于忽略操作系统/编辑器/工具文件(.DS_Store、IDE 配置、Emacs/Vim 产生的杂物)。
  • 也有人认为仓库级 .gitignore 仍应防御性地忽略常见的 OS/编辑器产物,因为并非每个人都会维护全局忽略。
  • 常见模式:
    • 全局忽略所有点文件(.*),但显式取消忽略关键文件(!.gitignore!.editorconfig 等)。
    • 使用专门的临时/试验目录,或在按目录设置的 .gitignore 中使用 * 来放置一次性文件。
    • 使用 .git/info/exclude 作为个人的、仓库本地但不共享的忽略规则。

AI / 代理配置文件(例如 CLAUDE.md)

  • 对这些文件是否应放入仓库存在分歧:
    • 有些人认为项目级 AI 指令是有用的共享文档。
    • 另一些人认为它们更像是个人偏好堆砌,接近编辑器配置,更倾向于使用 .local 风格、被 git 忽略的变体。

工具、CI 与替代性保障

  • 有几条评论推荐使用 GUI/TUI(Magit、lazygit、tig、IDE 集成)来进行可视化 diff 和按 hunk 暂存。
  • 有些人使用 lint/hook(例如 alint)或 CI 规则来阻止不允许的路径。
  • CI 因缺少文件而失败,被认为比泄露密钥的后果更轻;但也有人担心工作丢失以及“在我机器上能跑”的问题。