Add gitea-repo-sync skill

这个提交包含在:
X
2026-03-06 18:27:32 -08:00
父节点 71e6c95e23
当前提交 b2c5ef588d
修改 5 个文件,包含 433 行新增0 行删除

119
gitea-repo-sync/SKILL.md 普通文件
查看文件

@@ -0,0 +1,119 @@
---
name: gitea-repo-sync
description: 在自建或托管 Gitea 上自动创建仓库、初始化或复用本地 Git 项目、配置远程并安全推送分支/标签。适用于“给当前目录建 Gitea 仓库”“同步本地项目到 Gitea”“给组织创建仓库再推送代码”这类请求。
metadata:
short-description: Create Gitea repositories and sync local projects safely
---
# Gitea Repo Sync
在 Gitea 上建仓、连远程、推送代码的标准化技能。
优先使用打包好的 `scripts/gitea_repo_sync.py`,不要重复手写零散 `curl` + `git` 命令。脚本会先探测仓库是否已存在,再按需要创建仓库、初始化本地 Git、配置远程并执行 push。
## 什么时候用
- 用户要把当前目录项目同步到 Gitea
- 用户要在某个 owner 或 organization 下创建新仓库
- 本地目录还不是 Git 仓库,但需要初始化后推送
- 需要复用已有远程仓库,而不是盲目重复创建
- 需要在自动化里稳定处理 token、remote 和 push 顺序
## 需要的输入
- `GITEA_URL`:例如 `https://git.hk.hao.work`
- `GITEA_TOKEN`:具备建仓和推送权限的 token
- `owner`:用户名或组织名,例如 `hao`
- `repo`:仓库名,例如 `demo-project`
- `source_dir`:要同步的本地目录
- 可选 `branch`:默认推送的分支名,常见为 `main`
- 可选 `description` / `private` / `tags`
优先使用环境变量:
```bash
export GITEA_URL='https://git.hk.hao.work'
export GITEA_TOKEN='<your_token>'
```
## 标准流程
1. 先确认本地目录路径、目标 owner 和 repo 名。
2. 调 Gitea API 查询仓库是否已存在。
3. 若不存在,则按 owner 类型创建:
- 当前登录用户自己的仓库:`POST /api/v1/user/repos`
- 组织仓库:`POST /api/v1/orgs/{org}/repos`
4. 进入本地目录检查是否为 Git 仓库:
- 不是 Git 仓库时,只有在明确需要时才初始化
- 已经是 Git 仓库时,优先复用现有提交历史
5. 配置或校验远程:
- 无 remote 时新增
- remote 已存在但 URL 不同,默认停止并提示;只有明确允许时才替换
6. 按请求推送:
- 单分支:`push --set-upstream`
- 全部分支:`push --all`
- 标签:`push --tags`
7. 输出最终仓库 URL、remote URL、本地分支和 push 结果。
## 安全默认值
- 不强制覆盖现有 remote,除非明确传 `--replace-remote`
- 不自动 `git add` / `git commit`,除非明确传 `--stage-all``--commit-message`
- 不自动 `force push`
- 不把 token 写进 git remote URL
- 仓库已存在时优先复用,不重复创建
## 推荐脚本
使用 `scripts/gitea_repo_sync.py`
### 常见用法
```bash
python3 scripts/gitea_repo_sync.py \
--server-url "$GITEA_URL" \
--token "$GITEA_TOKEN" \
--owner hao \
--repo demo-project \
--source-dir /path/to/project \
--init-git \
--branch main \
--stage-all \
--commit-message 'Initial import'
```
如果仓库已存在,只同步当前分支:
```bash
python3 scripts/gitea_repo_sync.py \
--server-url "$GITEA_URL" \
--token "$GITEA_TOKEN" \
--owner hao \
--repo demo-project \
--source-dir /path/to/project \
--branch main
```
推送全部分支和标签:
```bash
python3 scripts/gitea_repo_sync.py \
--server-url "$GITEA_URL" \
--token "$GITEA_TOKEN" \
--owner hao \
--repo demo-project \
--source-dir /path/to/project \
--push-all \
--tags
```
## 常见坑
- 不要把 `GITEA_TOKEN` 提交进仓库。
- 不要在 remote URL 里长期保存带 token 的认证串。
- 不要在 remote 已存在时静默改写 URL。
- 不要在工作区有未确认修改时自动提交;先确认是否需要 `--stage-all`
- 不要默认 `--push-all`;很多场景只需要当前分支。
## 参考资料
- `references/gitea-api-notes.md`