Files
2026-08-20 23:42:02 +08:00

223 lines
7.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# git-init 使用文档
在 Cursor 里用本 Skill 完成完整 Git 流程。默认远程为 **Gitea**(自建或公网实例):初始化、每次签名提交、每次推送,以及克隆、拉取、分支、合并、标签、暂存。令牌只存在本机并加密,不会出现在对话或仓库里。
配套阅读:
- [架构.md](架构.md) — 组件、数据流、流程图
- [Gitea 说明](../.cursor/skills/git-init/gitea.md) — URL、Token、SSH、GPG 菜单
## 你需要准备什么
| 时机 | 你提供什么 | 不要提供什么 |
| --- | --- | --- |
| 本机一次 | 作者档案 + Gitea 访问令牌(本机终端) | 不要在 Cursor 聊天里粘贴 Token |
| 初始化 | Gitea 仓库 URL;可选 SSH/GPG 偏好 | 不要把私钥或 Token 发给 Agent |
| 日常提交 / 推送 | 说「提交」「推送」或「提交并推送」 | 不必再给 Token |
| 克隆 / 拉取 | Gitea URL 或「拉取远程」 | 不必再给 Token |
默认作者(可在档案里改):`旅行呀~` `<travelxiao@qq.com>`
提交信息必须是中文:`类型: 描述``初始化` / `新增` / `修复` / `优化` / `文档`)。
**每次提交还必须带 `Co-authored-by`**(与档案作者一致,可另加合作者):
```
类型: 描述
Co-authored-by: 旅行呀~ <travelxiao@qq.com>
```
`emit-commit-message.ps1` 自动拼上。额外合作者在 `store-profile.ps1` 里按 `Name <email>` 追加,写入档案的 `coAuthors`
## Gitea 地址示例
```
https://git.example.com/owner/repo.git
https://git.example.com:3000/owner/repo.git
git@git.example.com:owner/repo.git
ssh://git@git.example.com:2222/owner/repo.git
```
HTTPS:用户名 = Gitea 登录名,密码 = **访问令牌**(设置 → 应用 → 生成新令牌)。
SSH / GPG:设置 → SSH / GPG 密钥。
## 安装
在本仓库根目录:
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File .\install.ps1
```
效果:
- 项目级:`.cursor/skills/git-init`(本仓库直接可用)
- 个人级:`%USERPROFILE%\.cursor\skills\git-init`(所有项目可用)
不要安装到 `~\.cursor\skills-cursor\`。改了 Skill 源码后重新跑一次 `install.ps1`
## 本机一次配置
在**自己的 PowerShell**里运行(不要在对话里贴 Token):
```powershell
$scripts = "$env:USERPROFILE\.cursor\skills\git-init\scripts"
powershell -NoProfile -ExecutionPolicy Bypass -File "$scripts\store-profile.ps1"
powershell -NoProfile -ExecutionPolicy Bypass -File "$scripts\store-token.ps1"
```
- `store-profile`:姓名、邮箱、**Gitea 用户名**、SSH 私钥路径;可选追加额外 `Co-authored-by``Name <email>`
- `store-token`:隐藏输入 **Gitea 访问令牌**DPAPI 加密到 `%USERPROFILE%\.git-skills\token.dpapi`
检查(可在 Cursor 里跑,不会打印 Token):
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File "$scripts\profile-status.ps1"
powershell -NoProfile -ExecutionPolicy Bypass -File "$scripts\token-status.ps1"
```
`token-status` 只会出现 `present` / `missing` / `invalid`
## 在 Cursor 里怎么说
把下面整句发给 Agent(把 URL 换成你的 Gitea 仓库)。
### 初始化
```text
用 git-init 初始化这个仓库,远程是 git@git.example.com:owner/repo.git
```
或:
```text
用 git-init 初始化,远程是 https://git.example.com:3000/owner/repo.git
```
会:`git init`、写本地作者、加 origin、注入凭据、SSH/GPG、补 `.gitignore`、中文签名提交、推送 `main`
### 日常提交
```text
按 git-init 提交这些改动
```
### 日常推送
```text
推送到 Gitea
```
### 提交并推送
```text
提交并推送
```
### 克隆
```text
用 git-init 克隆 https://git.example.com/owner/repo.git
```
### 拉取
```text
拉取远程更新
```
默认 `--ff-only`。历史分叉时会停下问你,不会强推。
### 分支 / 合并 / 查看
```text
基于当前分支新建 feature/login 并切过去
把 feature/login 合进 main
现在 git 状态怎么样
```
更多例句见 [examples.md](../.cursor/skills/git-init/examples.md)。
## 能力一览
| 路径 | 做什么 | 认证 |
| --- | --- | --- |
| Init | 建库、远程、SSH、GPG、首次提交并推送 | Gitea Token + SSH |
| Commit | 每次中文签名提交 + `Co-authored-by` | 本地 GPG |
| Push | 每次推送当前分支 | Token 或 SSH |
| Clone | 克隆 Gitea 仓库 | `prepare-auth` |
| Sync | fetch / pull --ff-only | `prepare-push` |
| Branch / Merge / Tag / Stash / Inspect | 本地协作与只读查看 | 按需联网 |
## 安全约定
- Token 只在 `%USERPROFILE%\.git-skills\token.dpapi`,绑定当前 Windows 用户
- Agent 不得读取该文件,不得让你在聊天里贴 Token
- 不修改已有 `origin`,不改全局 `user.name` / `user.email`
-`--force`、不 `reset --hard`、不跳过 hooks,除非你写明要求
## Gitea 密钥:添加 → 验证(必做)
官方:[GPG/SSH Commit Signatures](https://docs.gitea.com/administration/signing/)。完整步骤见 [gitea.md](../.cursor/skills/git-init/gitea.md)。
网页灰色开锁 /「找不到此签名对应的密钥」= 库中没有**已验证**的可用密钥。只「增加密钥」不够,必须在 `https://<你的Gitea>/user/settings/keys`**验证**
### 验证 GPG(本 Skill 默认用 GPG 签提交)
在 Cursor 里说「验证 Gitea GPG/SSH 密钥」即可。Agent 会**主动问你要页面令牌**,然后生成签名块给你贴回。
也可本机自己跑:
```powershell
$scripts = "$env:USERPROFILE\.cursor\skills\git-init\scripts"
powershell -NoProfile -ExecutionPolicy Bypass -File "$scripts\verify-gitea-keys.ps1" `
-GpgToken "GPG页面令牌" `
-SshToken "SSH页面令牌" `
-KeyId "你的GPG_Key_ID"
```
(你当前本机 Key ID 示例:`5996DA789B43D451`,以 `gpg --list-secret-keys --keyid-format LONG` 或 Gitea 页面为准。)
说明:
- **可以**把「验证」页上的一次性挑战令牌发给 Agent(不是访问令牌)
- **不要**把 HTTPS 访问令牌发到对话;访问令牌只用 `store-token.ps1`
- Agent 生成签名后,把 `BEGIN PGP SIGNATURE` / `BEGIN SSH SIGNATURE` 贴回 Gitea → **验证**
- 本地保持:
```powershell
git config user.signingkey <你的GPG_Key_ID>
git config commit.gpgsign true
git config --unset gpg.format # 若曾设为 ssh
```
官方:GPG 用 `echo "TOKEN"`(有换行);SSH 用 `echo -n`(无换行)。验证成功后**新提交**才会显示已验证;旧提交可能仍开锁。硬刷新(Ctrl+F5)再看。
## 本机依赖
- Git for Windows(含 Git Credential Manager、建议用自带 `gpg.exe` / Git Bash
- Windows OpenSSH`ssh-keygen` / `ssh-agent`
- GPGGpg4win,或 Git 自带 `gpg`
## 常见问题
**对话里提示 profile/token missing**
本机跑 `store-profile.ps1` / `store-token.ps1`
**HTTPS 推送失败**
令牌是否过期、是否勾选仓库写权限;自建是否带端口(如 `:3000`);重新 `store-token` 后再推送。
**SSH Permission denied**
公钥是否已加到 Gitea;自定义端口 URL 是否写成 `ssh://git@host:2222/...`。用 `test-ssh.ps1` 测。
**首次连接自建主机问 fingerprint**
在本机终端确认 host key,不要把 Token 发到聊天。
**提交在 Gitea 网页显示「找不到此签名对应的密钥」**
对 Cursor 说「验证 Gitea SSH 和 GPG」。Agent 会主动要两个页面挑战令牌并生成签名块。HTTPS 访问令牌仍不要发到对话。详见 [gitea.md](../.cursor/skills/git-init/gitea.md)。
**改了 Skill 但行为没变**
再跑 `install.ps1`,必要时重开对话。