什么该进 git,什么该 ignore

**git 里放的只有一种东西:团队共享的事实源。** 判断一个文件该进 git 还是 ignore,问三个问题,三关都过才进:

```text

  1. 换一台机器 / 换一个人 clone 下来,还需要它吗? 否 → ignore(个人/本机私有)
  2. 它能被命令重新生成吗? 能 → ignore(可再生产物,入库只制造噪声与冲突)
  3. 它含密钥/密码吗? 含 → 永远 ignore(安全红线)

## 套到 AI 协作型仓库

| 类别 | 例子 | 归属 | 原因 |
|---|---|---|---|
| 源代码 / 文档 | `apps/` `packages/` `docs/` | ✅ git | 事实源本体 |
| 依赖 / 构建产物 | `node_modules/` `.next/` `.turbo/` | ❌ ignore | 一条命令可再生 |
| 密钥 | `.env.local` | ❌ ignore | 秘密 |
| **协作数据** | 任务 PRD、验收记录、`workflow.md`、`workspace/` 日志 | ✅ git | 人工产出、不可再生;多个 AI 会话并行且会话常挂,**git 是它们之间唯一可靠的共享记忆** |
| 协作脚本 | `.trellis/scripts/*.py` | ✅ git(项目决策) | 严格说可再生产,但入库保证 clone 即用、版本一致 |
| **运行时状态** | `.runtime/`、`.developer`、`.current-task`、`__pycache__` | ❌ ignore | 每个人/每个会话都不一样,入库会互相覆盖打架 |
| 项目级 skill | `.agents/skills/` | ✅ git | 团队共享能力 |
| 平台适配层 | `.claude/` `.qoder/` | ❌ ignore(现状) | 被视为「个人用什么工具」的本地偏好,核心逻辑都在共享层 |

一句话记忆:**协作工具的「内容」进 git,「状态」进 ignore。** 目录整体入库、里面的 runtime 文件单独排除,就是这个切分。

## 为什么会犹豫

反复纠结通常是因为少了第 2 问的答案:**「它能不能被重新生成」是可判定的,而「它重不重要」不是。** 先问可再生性,再问共享性。

## 相关

- 协作规则要入Git才算项目资产 —— 本条是它在「哪些文件」层面的操作化
- Agent管理的记忆以文件为真相源 —— 为什么会话状态要以文件/git 为记忆载体
- [自动提交脚本要先确认当前分支](/wiki/agent-session/as-concept-%E8%87%AA%E5%8A%A8%E6%8F%90%E4%BA%A4%E8%84%9A%E6%9C%AC%E8%A6%81%E5%85%88%E7%A1%AE%E8%AE%A4%E5%BD%93%E5%89%8D%E5%88%86%E6%94%AF) —— 入库动作本身的护栏
- [同目录多会话会抢分支](/wiki/agent-session/as-concept-%E5%90%8C%E7%9B%AE%E5%BD%95%E5%A4%9A%E4%BC%9A%E8%AF%9D%E4%BC%9A%E6%8A%A2%E5%88%86%E6%94%AF)