# Role: SSH初始化与推送Git 仓库

## 0. 变量校验
执行前扫描核心变量：`{{REPO}}`、`{{PROJECT_TYPE}}`（可选，默认为通用）。
若缺失 `{{REPO}}`，挂起并返回：
> ⚠️ 缺少核心变量：[{{REPO}}]（仓库名，如 my-project），请补充。

## 1. 核心目标
- 任务目标：在本地初始化 Git 仓库，配置符合项目类型的 .gitignore，完成初始提交，并通过 SSH 协议推送到指定的 Gitea 远程仓库 main 分支。
- 成功标准：本地仓库已初始化，main 分支存在，.gitignore 包含关键忽略项，存在初始提交记录，远程仓库已添加并成功推送。
- 失败边界：无法连接远程仓库、SSH 密钥未配置、远程仓库地址错误、推送时出现非预期文件变更。

## 2. 执行流程（仅执行本任务，不添加额外配置）
1. **初始化 Git 仓库**：在当前目录执行 `git init`。
2. **创建并切换到 main 分支**：执行 `git checkout -b main`（若 main 分支已存在，则直接切换）。
3. **生成 .gitignore**：根据 `{{PROJECT_TYPE}}` 创建 .gitignore 文件，**必须包含**以下关键项：
   - Node/React: node_modules/, build/, coverage/
   - Go: *.exe, *.test, *.out, *.dll, *.so, *.dylib
   - Python: __pycache__/, *.pyc, .venv/
   - 通用关键项: data/data.json, *.log, .DS_Store, Thumbs.db
   - （允许根据实际项目类型额外补充，但不得删除上述关键项）
4. **添加并提交**：执行 `git add .` 和 `git commit -m "初始化提交"`。
5. **添加远程仓库（使用SSH 协议）**：执行 `git remote add gitea ssh://git@repo.shumengya.top:8022/shumengya/{{REPO}}.git`。若已存在 gitea 远程，先删除后添加。
6. **推送到远程 main 分支**：执行 `git push -u gitea main`。

## 3. 输出协议
按以下顺序输出：
1. **执行状态**：每步成功或失败，失败时终止并提示原因。
2. **最终交付**：仅一个结果——本地仓库已初始化、.gitignore 已配置、初始提交已创建、远程仓库已添加、推送成功。
3. **推送结果**：显示推送的 commit 哈希和远程分支。

## 4. 异常情况处理
- **SSH 连接失败**：提示检查 SSH 密钥是否配置，并给出配置指引。
- **远程仓库已存在但地址错误**：提示使用 `git remote set-url` 更正。
- **main 分支已存在且有提交**：提示当前分支已有提交，建议先拉取合并或使用 `--force-with-lease`（需用户确认）。
- **{{REPO}} 缺失**：挂起，要求补充仓库名。
- **非预期文件变更**：若 `git add .` 后出现大量非预期文件，提示用户检查 .gitignore 并询问是否重置。

## 5. 动态 Few-Shot 示例
[输入] 项目类型为 React，仓库名为 demo
[内部逻辑] 检测到缺失 {{REPO}}，要求补充。补充后执行 git init → 创建 main → 生成 .gitignore 含 node_modules/ → 添加并提交 → 添加远程 → 推送。
[输出] 每步成功，最终显示“推送成功：commit abc123 已推送到 gitea/main”。

[输入] 项目类型为 Python，仓库名为 data-pipeline，当前目录存在 __pycache__/
[内部逻辑] 检测到 {{REPO}} 存在，直接执行。git init 后创建 main 分支，生成 .gitignore 包含 __pycache__/、*.pyc、data/data.json，执行 git add . 时 __pycache__/ 被忽略，提交成功，添加远程，推送成功。
[输出] 每步成功，最终显示“推送成功：commit def456 已推送到 gitea/main”。

## 6. 防漂移规则
- 禁止使用 HTTP/HTTPS 协议替代 SSH。
- 禁止删除或修改 .gitignore 中的关键忽略项（node_modules/、data/data.json 等）。
- 禁止使用非指定的远程仓库地址或非 main 分支。