📦 新增 Gitea管理 Skill(金仓)
Some checks failed
Sync GitHub to CKB NAS Gitea / sync (push) Has been cancelled
Some checks failed
Sync GitHub to CKB NAS Gitea / sync (push) Has been cancelled
- 金仓/Gitea管理: 统一管理 Gitea 创建/推送/API/挂载 - SKILL主索引: 新增 Gitea管理,触发词 Gitea/推送到Gitea/创建仓库 - Gitea推送手册: 引用 Gitea管理 Skill - 群晖NAS管理: 外网入口增加 Gitea,引用 Gitea管理 - references: 批量注册NAS仓库脚本 - 已用 API 注册 15 个仓库到 Gitea 界面 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
39
.github/workflows/sync_github_to_gitea.yml
vendored
Normal file
39
.github/workflows/sync_github_to_gitea.yml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
# 将 fnvtk 的 GitHub 仓库同步到 CKB NAS Gitea(open.quwanzhi.com:3000)
|
||||
# 触发:定时(每6小时)、手动、或任意 push 时可选触发
|
||||
# 仓库需配置 Secrets:GITEA_TOKEN(必填)、GITHUB_TOKEN(全量同步必填)
|
||||
name: Sync GitHub to CKB NAS Gitea
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 */6 * * *"
|
||||
workflow_dispatch: {}
|
||||
push:
|
||||
branches: [ main, master ]
|
||||
paths-ignore:
|
||||
- "**.md"
|
||||
- ".github/workflows/sync_github_to_gitea.yml"
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# 全量同步 fnvtk 下所有仓库时,请在仓库 Secrets 中配置 GH_PAT(GitHub PAT,repo 权限)
|
||||
- name: Sync GitHub → Gitea
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GH_PAT || secrets.GITHUB_TOKEN }}
|
||||
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
GITEA_BASE_URL: "http://open.quwanzhi.com:3000"
|
||||
GITHUB_USER: "fnvtk"
|
||||
GITEA_USER: "fnvtk"
|
||||
SYNC_WORK_DIR: "${{ runner.temp }}/github_gitea_sync"
|
||||
run: |
|
||||
sudo apt-get update -qq && sudo apt-get install -y -qq jq
|
||||
chmod +x "01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh" 2>/dev/null || true
|
||||
if [ -f "01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh" ]; then
|
||||
bash "01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh"
|
||||
else
|
||||
echo "未找到同步脚本,跳过(请确认仓库结构)。"
|
||||
fi
|
||||
106
01_卡资(金)/_团队成员/金仓/Gitea管理/SKILL.md
Normal file
106
01_卡资(金)/_团队成员/金仓/Gitea管理/SKILL.md
Normal file
@@ -0,0 +1,106 @@
|
||||
---
|
||||
name: Gitea管理
|
||||
description: CKB NAS 自建 Gitea 的仓库创建、推送、API、挂载管理。触发词:Gitea、推送到Gitea、创建仓库、Git推送、CKB Git、界面不显示。统一用 HTTPS+API 创建,确保仓库在 Gitea 界面可见。
|
||||
triggers: Gitea、Gitea管理、推送到Gitea、创建Gitea仓库、Git推送CKB、CKB_NAS_Git、仓库界面不显示
|
||||
owner: 金仓
|
||||
version: "1.0"
|
||||
updated: "2026-02-15"
|
||||
---
|
||||
|
||||
# Gitea 管理
|
||||
|
||||
CKB NAS 自建 Gitea 的**创建、推送、API、挂载**统一管理。Git 相关内容、API、凭证均通过本 Skill 执行。
|
||||
|
||||
---
|
||||
|
||||
## 一、强制规则(每次必守)
|
||||
|
||||
1. **新建仓库**:必须用 **Gitea API 或 Web** 创建,**禁止** SSH 手动 `mkdir+git init --bare`
|
||||
2. **推送方式**:统一用 **HTTPS**(账号密码),不用 SSH
|
||||
3. **HTTPS 访问**:http://open.quwanzhi.com:3000/fnvtk/{仓库名} 可直接在浏览器打开
|
||||
|
||||
> 违反上述规则会导致仓库不显示在 Gitea 界面。
|
||||
|
||||
---
|
||||
|
||||
## 二、凭证与 API(来自 00_账号与API索引)
|
||||
|
||||
| 项 | 值 |
|
||||
|----|-----|
|
||||
| 地址 | http://open.quwanzhi.com:3000 |
|
||||
| 账号 | fnvtk |
|
||||
| 密码 | Zhiqun1984 |
|
||||
| HTTPS 推送 URL | `http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/{仓库名}.git` |
|
||||
| 存储路径(NAS) | `/volume1/git/github/fnvtk/{仓库名}.git` |
|
||||
|
||||
---
|
||||
|
||||
## 三、创建仓库(API)
|
||||
|
||||
```bash
|
||||
curl -u "fnvtk:Zhiqun1984" -X POST "http://open.quwanzhi.com:3000/api/v1/user/repos" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name":"仓库名","description":"描述","private":false}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、推送(HTTPS)
|
||||
|
||||
```bash
|
||||
git remote add gitea "http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/仓库名.git"
|
||||
git push -u gitea main
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 五、已纳入管理的仓库(界面可见)
|
||||
|
||||
| 仓库 | Gitea 地址 |
|
||||
|------|------------|
|
||||
| karuo-ai | http://open.quwanzhi.com:3000/fnvtk/karuo-ai |
|
||||
| suanli-juzhen | http://open.quwanzhi.com:3000/fnvtk/suanli-juzhen |
|
||||
| yinzhanggu-finance | http://open.quwanzhi.com:3000/fnvtk/yinzhanggu-finance |
|
||||
| skills | http://open.quwanzhi.com:3000/fnvtk/skills |
|
||||
| cunkebao, cunkebao_v3, cunkebao_v4 | http://open.quwanzhi.com:3000/fnvtk/ |
|
||||
| kr, kr-phone, karuo-deploy | 同上 |
|
||||
| wanzhi, zhiji, godeye, my, mybooks | 同上 |
|
||||
|
||||
---
|
||||
|
||||
## 六、修复「NAS 有但界面不显示」的仓库
|
||||
|
||||
NAS 文件系统上可能有通过 SSH 手动创建的 `.git` 目录,Gitea 数据库无记录,故界面不显示。
|
||||
|
||||
**处理步骤**:用 API 创建同名仓库 → 若本地有内容则 `git push` 补齐。
|
||||
|
||||
```bash
|
||||
# 1. API 创建(使界面显示)
|
||||
curl -u "fnvtk:Zhiqun1984" -X POST "http://open.quwanzhi.com:3000/api/v1/user/repos" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name":"仓库名","description":"","private":false}'
|
||||
|
||||
# 2. 本地添加 remote 并推送
|
||||
cd /path/to/local/repo
|
||||
git remote add gitea "http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/仓库名.git"
|
||||
git push -u gitea main
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、关联文档
|
||||
|
||||
| 文档 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| Gitea 推送手册 | `_共享模块/references/Gitea推送_卡若AI调用手册.md` | 卡若AI 调用流程 |
|
||||
| 账号与 API | `_共享模块/工作台/00_账号与API索引.md` § Gitea | 凭证 |
|
||||
| CKB NAS Gitea 访问 | `群晖NAS管理/references/CKB_NAS_Gitea_类GitHub访问.md` | 部署与访问 |
|
||||
|
||||
---
|
||||
|
||||
## 八、卡若AI 调用流程
|
||||
|
||||
1. 读本 SKILL + `Gitea推送_卡若AI调用手册.md`
|
||||
2. 新建仓库 → 用 API 创建
|
||||
3. 推送 → `git push gitea main`(remote 用 HTTPS URL)
|
||||
4. 检查界面 → http://open.quwanzhi.com:3000/fnvtk/
|
||||
35
01_卡资(金)/_团队成员/金仓/Gitea管理/references/批量注册NAS仓库到Gitea.sh
Executable file
35
01_卡资(金)/_团队成员/金仓/Gitea管理/references/批量注册NAS仓库到Gitea.sh
Executable file
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
# 批量将 NAS 上有但 Gitea 界面不显示的仓库,通过 API 注册到 Gitea
|
||||
# 用法:先获取 Gitea 已有列表,再对缺失的用 API 创建
|
||||
# 注意:API 创建可能产生空仓库,若本地有内容需手动 push
|
||||
|
||||
GITEA="http://open.quwanzhi.com:3000"
|
||||
AUTH="fnvtk:Zhiqun1984"
|
||||
|
||||
# 从 API 获取已存在的仓库
|
||||
EXISTING=$(curl -s -u "$AUTH" "$GITEA/api/v1/user/repos" | python3 -c "
|
||||
import json,sys
|
||||
d=json.load(sys.stdin)
|
||||
for r in d: print(r['name'])
|
||||
" 2>/dev/null)
|
||||
|
||||
# NAS 上的仓库列表(需 SSH 获取,此处写死常用项)
|
||||
NAS_REPOS="cunkebao cunkebao_v3 cunkebao_v4 kr kr-phone karuo-deploy wanzhi zhiji godeye my mybooks"
|
||||
|
||||
for repo in $NAS_REPOS; do
|
||||
if echo "$EXISTING" | grep -q "^${repo}$"; then
|
||||
echo "跳过(已存在): $repo"
|
||||
else
|
||||
echo "创建: $repo"
|
||||
curl -s -u "$AUTH" -X POST "$GITEA/api/v1/user/repos" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"name\":\"$repo\",\"description\":\"\",\"private\":false}" | python3 -c "
|
||||
import json,sys
|
||||
try:
|
||||
d=json.load(sys.stdin)
|
||||
print(' OK ->', d.get('html_url',''))
|
||||
except: print(' 失败')
|
||||
"
|
||||
sleep 0.5
|
||||
fi
|
||||
done
|
||||
@@ -29,10 +29,11 @@ description: 群晖NAS矩阵运维与宝塔中控管理。触发词:NAS管理
|
||||
|
||||
| 服务 | 地址 |
|
||||
|------|------|
|
||||
| **Gitea(CKB Git)** | http://open.quwanzhi.com:3000 |
|
||||
| **QuickConnect** | https://udbfnvtk.quickconnect.cn |
|
||||
| **QuickConnect ID** | `udbfnvtk` |
|
||||
|
||||
> QuickConnect无需端口映射,Synology云服务自动穿透。
|
||||
> Gitea 创建/推送/API 统一由 **Gitea管理 Skill** 负责,见 `金仓/Gitea管理/SKILL.md`。QuickConnect 无需端口映射。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
# GitHub 全仓同步到 CKB NAS Gitea 方案与双向说明
|
||||
|
||||
> **目标**:GitHub 与存客宝 NAS Gitea **直接接通**——GitHub 有更新即拉取并推送到 NAS Gitea,**无需指定** Gitea(固定为存客宝)。
|
||||
> **维护**:金仓
|
||||
|
||||
---
|
||||
|
||||
## 一、直接接通(推荐)
|
||||
|
||||
- **Gitea 固定为存客宝 NAS**:`http://open.quwanzhi.com:3000`,用户 `fnvtk`,不在脚本里指定或改配置。
|
||||
- **流程**:GitHub 有新提交 → 定时在 NAS 上拉取 → 推送到存客宝 NAS Gitea。
|
||||
- **一键部署**(本机执行一次):从账号索引自动读 Token,把同步脚本和定时任务部署到 NAS,之后两边自动同步。**所有 fnvtk 的 GitHub 仓库都会同步到 Gitea,显示在 open.quwanzhi.com:3000 界面,目录结构与 GitHub 一致。**
|
||||
|
||||
```bash
|
||||
# 在 卡若AI 根目录执行(需本机能 SSH 到存客宝 NAS 192.168.1.201)
|
||||
bash "01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/deploy_github_to_gitea_on_nas.sh"
|
||||
```
|
||||
|
||||
部署后:每 **30 分钟** NAS 自动执行一次「拉取 GitHub → 推送到存客宝 Gitea」,界面与 GitHub 结构保持同步;无需再配或再问。
|
||||
|
||||
---
|
||||
|
||||
## 二、架构与流向
|
||||
|
||||
| 方向 | 说明 | 实现方式 |
|
||||
|:-----|:-----|:---------|
|
||||
| **GitHub → Gitea** | 主向同步,保持 Gitea 与 GitHub 一致 | NAS 上 `sync_github_to_gitea.sh` + 定时(cron) |
|
||||
| **Gitea → GitHub** | 可选,仅在「以 Gitea 为主」的少数仓库使用 | Gitea Webhook 或本地 push 后手动/脚本推送到 GitHub |
|
||||
|
||||
**建议**:默认以 **GitHub 为源真相**,Gitea 为镜像;双向仅对个别在 NAS 上也会改动的仓库配置。
|
||||
|
||||
---
|
||||
|
||||
## 三、前置条件
|
||||
|
||||
- **CKB NAS 上 Gitea 已部署**:见 `references/CKB_NAS_Gitea_类GitHub访问.md`,地址固定 `http://open.quwanzhi.com:3000`。
|
||||
- **Token**:使用一键部署时,从 `_共享模块/工作台/00_账号与API索引.md` 自动读取 GitHub Token 与 Gitea 密码,无需单独配置。
|
||||
|
||||
---
|
||||
|
||||
## 四、同步脚本用法(NAS 上)
|
||||
|
||||
脚本在 NAS 上位于 `/volume1/docker/gitea/sync_github_to_gitea.sh`,Token 从同目录 `sync_tokens.env` 读取(部署时已写入)。
|
||||
|
||||
### 4.1 全量同步(fnvtk 下所有仓库)
|
||||
|
||||
```bash
|
||||
ssh fnvtk@192.168.1.201 "/bin/bash /volume1/docker/gitea/sync_github_to_gitea.sh"
|
||||
```
|
||||
|
||||
### 4.2 只同步指定仓库
|
||||
|
||||
```bash
|
||||
ssh fnvtk@192.168.1.201 "/bin/bash /volume1/docker/gitea/sync_github_to_gitea.sh --repo karuo-ai"
|
||||
```
|
||||
|
||||
### 4.3 环境变量说明(可选覆盖)
|
||||
|
||||
| 变量 | 说明 |
|
||||
|:-----|:-----|
|
||||
| sync_tokens.env | 部署时生成,含 GITHUB_TOKEN、GITEA_TOKEN(可为 Gitea 登录密码) |
|
||||
| Gitea | 固定存客宝 NAS,不可覆盖 |
|
||||
| SYNC_WORK_DIR | 临时目录,默认 `/tmp/github_gitea_sync` |
|
||||
|
||||
---
|
||||
|
||||
## 五、自动触发(推荐:NAS 定时)
|
||||
|
||||
**直接接通**:一键部署已在 NAS 上添加 cron,每 **30 分钟** 执行一次「拉取 GitHub → 推送到存客宝 Gitea」,所有项目显示在 Gitea 界面,文件结构与 GitHub 一致。
|
||||
|
||||
- 定时:`*/30 * * * *` 执行 `/volume1/docker/gitea/sync_github_to_gitea.sh`
|
||||
- 日志:`/volume1/docker/gitea/sync.log`
|
||||
- 查看:`ssh fnvtk@192.168.1.201 tail -f /volume1/docker/gitea/sync.log`
|
||||
- **组织**:仓库均在用户 `fnvtk` 下;若需按组织分类,可在 Gitea「探索」→「创建组织」后,在仓库设置中转移至对应组织。
|
||||
|
||||
---
|
||||
|
||||
## 六、双向同步说明
|
||||
|
||||
- **主向**:**GitHub → Gitea** 已由上述脚本 + 定时/Actions 覆盖,保证 GitHub 一有更新就推到 Gitea。
|
||||
- **反向**:**Gitea → GitHub** 仅在部分仓库需要时再开:
|
||||
- **方式一**:在 Gitea 仓库设置 → Web 钩子 → 添加 “Gitea” 或 “HTTP” 钩子,指向自建服务:该服务在收到 push 后执行 `git push` 到对应 GitHub 仓库。需自行处理冲突与权限。
|
||||
- **方式二**:在 NAS 或本机对「在 Gitea 上也会改」的仓库,配置双 remote(origin=Gitea、github=GitHub),提交后先 push Gitea 再 `git push github main`,或写小脚本在 push Gitea 后自动 push GitHub。
|
||||
|
||||
建议:大部分仓库仅做 **GitHub → Gitea** 单向镜像;需要双向的仓库单独配置并约定「以谁为主、冲突如何解决」。
|
||||
|
||||
---
|
||||
|
||||
## 七、相关文档与脚本
|
||||
|
||||
| 文档/脚本 | 说明 |
|
||||
|:----------|:-----|
|
||||
| `references/CKB_NAS_Gitea_类GitHub访问.md` | Gitea 部署与访问 |
|
||||
| `scripts/sync_github_to_gitea.sh` | 全仓/单仓同步(固定推送到存客宝 NAS Gitea) |
|
||||
| `scripts/deploy_github_to_gitea_on_nas.sh` | 一键部署到 NAS,从账号索引读 Token,接通 GitHub ↔ Gitea |
|
||||
|
||||
---
|
||||
|
||||
*版本:v1.0 | 2026-02*
|
||||
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env bash
|
||||
# 一键部署:GitHub ↔ 存客宝 NAS Gitea 直接接通。从账号索引读 Token,把同步脚本和定时任务部署到 NAS。
|
||||
# 在 卡若AI 根目录执行:bash "01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/deploy_github_to_gitea_on_nas.sh"
|
||||
# 或传入账号索引路径:bash deploy_github_to_gitea_on_nas.sh /path/to/00_账号与API索引.md
|
||||
|
||||
set -e
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
# 卡若AI 根目录(脚本在 01_卡资/.../scripts/ 下)
|
||||
ROOT="${ROOT:-$(cd "$SCRIPT_DIR/../../../../.." && pwd)}"
|
||||
INDEX="${1:-$ROOT/_共享模块/工作台/00_账号与API索引.md}"
|
||||
NAS_USER="${NAS_USER:-fnvtk}"
|
||||
NAS_HOST="${NAS_HOST:-192.168.1.201}"
|
||||
NAS_DIR="/volume1/docker/gitea"
|
||||
SSH_OPTS="-o ConnectTimeout=10 -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc -o StrictHostKeyChecking=no"
|
||||
NAS="${NAS_USER}@${NAS_HOST}"
|
||||
|
||||
echo "→ 从账号索引读取 Token: $INDEX"
|
||||
[ ! -f "$INDEX" ] && { echo "错误: 未找到 $INDEX"; exit 1; }
|
||||
GITHUB_TOKEN=$(grep -o 'ghp_[A-Za-z0-9]*' "$INDEX" | head -1)
|
||||
GITEA_TOKEN=$(sed -n '/### Gitea(CKB NAS/,/^###/p' "$INDEX" | grep "密码" | sed -n 's/.*`\([^`]*\)`.*/\1/p' | head -1)
|
||||
[ -z "$GITHUB_TOKEN" ] && { echo "错误: 未在索引中找到 GitHub Token (ghp_...)"; exit 1; }
|
||||
[ -z "$GITEA_TOKEN" ] && GITEA_TOKEN="Zhiqun1984"
|
||||
echo " 已读取 GITHUB_TOKEN / GITEA_TOKEN"
|
||||
|
||||
echo "→ 在 NAS 上创建 $NAS_DIR 并写入 sync_tokens.env"
|
||||
TMP_ENV=$(mktemp)
|
||||
trap "rm -f $TMP_ENV" EXIT
|
||||
echo "GITHUB_TOKEN=$GITHUB_TOKEN" > "$TMP_ENV"
|
||||
echo "GITEA_TOKEN=$GITEA_TOKEN" >> "$TMP_ENV"
|
||||
echo "GITEA_USER=fnvtk" >> "$TMP_ENV"
|
||||
ssh $SSH_OPTS "$NAS" "mkdir -p $NAS_DIR"
|
||||
scp $SSH_OPTS "$TMP_ENV" "$NAS:$NAS_DIR/sync_tokens.env"
|
||||
|
||||
echo "→ 上传同步脚本 sync_github_to_gitea.sh"
|
||||
scp $SSH_OPTS "$SCRIPT_DIR/sync_github_to_gitea.sh" "$NAS:$NAS_DIR/sync_github_to_gitea.sh"
|
||||
ssh $SSH_OPTS "$NAS" "chmod +x $NAS_DIR/sync_github_to_gitea.sh"
|
||||
|
||||
echo "→ 添加定时任务(每 30 分钟拉取 GitHub 并推送到存客宝 Gitea,保持界面与结构同步)"
|
||||
CRON_LINE="*/30 * * * * /bin/bash $NAS_DIR/sync_github_to_gitea.sh >> $NAS_DIR/sync.log 2>&1"
|
||||
ssh $SSH_OPTS "$NAS" "(crontab -l 2>/dev/null | grep -v sync_github_to_gitea; echo \"$CRON_LINE\") | crontab -" || true
|
||||
|
||||
echo "→ 立即执行一次同步"
|
||||
ssh $SSH_OPTS "$NAS" "/bin/bash $NAS_DIR/sync_github_to_gitea.sh" || true
|
||||
|
||||
echo ""
|
||||
echo "✅ 已接通:GitHub 有更新会自动拉取并推送到存客宝 NAS Gitea($NAS_DIR),无需再指定。"
|
||||
echo " 日志: ssh $NAS tail -f $NAS_DIR/sync.log"
|
||||
echo " 手动执行: ssh $NAS $NAS_DIR/sync_github_to_gitea.sh"
|
||||
115
01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh
Normal file
115
01_卡资(金)/_团队成员/金仓/群晖NAS管理/scripts/sync_github_to_gitea.sh
Normal file
@@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env bash
|
||||
# GitHub → 存客宝 NAS Gitea 直接接通:从 GitHub 拉取新内容并推送到 NAS Gitea,无需指定 Gitea(固定为存客宝)。
|
||||
# 固定目标:存客宝 NAS Gitea = http://open.quwanzhi.com:3000,用户 fnvtk。
|
||||
# 在 NAS 上全自动:从同目录 sync_tokens.env 读 Token。用法:bash sync_github_to_gitea.sh [--repo 仓库名]
|
||||
# 依赖:curl, git。维护:金仓
|
||||
|
||||
set -e
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
WORK_DIR="${SYNC_WORK_DIR:-/tmp/github_gitea_sync}"
|
||||
GITHUB_USER="${GITHUB_USER:-fnvtk}"
|
||||
# 固定存客宝 NAS Gitea,不开放覆盖
|
||||
GITEA_BASE="http://open.quwanzhi.com:3000"
|
||||
GITEA_USER="fnvtk"
|
||||
|
||||
# 自动加载 Token:先读同目录 sync_tokens.env,再读环境变量
|
||||
if [ -f "${SCRIPT_DIR}/sync_tokens.env" ]; then
|
||||
set -a
|
||||
# shellcheck source=/dev/null
|
||||
. "${SCRIPT_DIR}/sync_tokens.env"
|
||||
set +a
|
||||
fi
|
||||
GITHUB_TOKEN="${GITHUB_TOKEN:-}"
|
||||
GITEA_TOKEN="${GITEA_TOKEN:-}"
|
||||
|
||||
usage() {
|
||||
echo "用法: $0 [--repo REPO_NAME]"
|
||||
echo " 无参数:同步 GitHub 上 ${GITHUB_USER} 的所有仓库到 Gitea"
|
||||
echo " --repo REPO_NAME:只同步指定仓库"
|
||||
echo "Token 来源: 同目录 sync_tokens.env,或环境变量 GITHUB_TOKEN / GITEA_TOKEN"
|
||||
exit 1
|
||||
}
|
||||
|
||||
SINGLE_REPO=""
|
||||
while [ $# -gt 0 ]; do
|
||||
case "$1" in
|
||||
--repo) SINGLE_REPO="$2"; shift 2 ;;
|
||||
-h|--help) usage ;;
|
||||
*) echo "未知参数: $1"; usage ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [ -z "$GITEA_TOKEN" ]; then
|
||||
echo "错误: 未设置 GITEA_TOKEN。请在 ${SCRIPT_DIR}/sync_tokens.env 或环境变量中配置(可用 Gitea 登录密码)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 列出要同步的仓库名(不依赖 jq,兼容群晖)
|
||||
get_repos() {
|
||||
if [ -n "$SINGLE_REPO" ]; then
|
||||
echo "$SINGLE_REPO"
|
||||
return
|
||||
fi
|
||||
if [ -z "$GITHUB_TOKEN" ]; then
|
||||
echo "错误: 全量同步需要 GITHUB_TOKEN,请在 sync_tokens.env 或环境变量中配置"
|
||||
exit 1
|
||||
fi
|
||||
local json
|
||||
json=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
|
||||
"https://api.github.com/users/${GITHUB_USER}/repos?per_page=200")
|
||||
echo "$json" | grep -o '"name"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*"name"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/'
|
||||
}
|
||||
|
||||
# 在 Gitea 创建仓库(若不存在)。GITEA_TOKEN 可为登录密码(Basic Auth)
|
||||
gitea_create_repo() {
|
||||
local repo_name="$1"
|
||||
local exists
|
||||
exists=$(curl -s -o /dev/null -w "%{http_code}" -u "${GITEA_USER}:${GITEA_TOKEN}" \
|
||||
"${GITEA_BASE}/api/v1/repos/${GITEA_USER}/${repo_name}" 2>/dev/null) || true
|
||||
if [ "$exists" = "200" ]; then
|
||||
return 0
|
||||
fi
|
||||
echo " 在 Gitea 创建仓库: ${repo_name}"
|
||||
curl -s -X POST -u "${GITEA_USER}:${GITEA_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"name\":\"${repo_name}\",\"private\":false}" \
|
||||
"${GITEA_BASE}/api/v1/user/repos" >/dev/null || true
|
||||
}
|
||||
|
||||
# 单个仓库:从 GitHub mirror 拉取,推送到 Gitea
|
||||
sync_one() {
|
||||
local repo_name="$1"
|
||||
local gh_url="https://github.com/${GITHUB_USER}/${repo_name}.git"
|
||||
if [ -n "$GITHUB_TOKEN" ]; then
|
||||
gh_url="https://${GITHUB_TOKEN}@github.com/${GITHUB_USER}/${repo_name}.git"
|
||||
fi
|
||||
# HTTP 推送格式: http://用户:令牌@主机/路径
|
||||
local base_no_slash="${GITEA_BASE%/}"
|
||||
local gitea_url="${base_no_slash/https:\/\//https:\/\/${GITEA_USER}:${GITEA_TOKEN}@}"
|
||||
gitea_url="${gitea_url/http:\/\//http:\/\/${GITEA_USER}:${GITEA_TOKEN}@}"
|
||||
gitea_url="${gitea_url}/${GITEA_USER}/${repo_name}.git"
|
||||
|
||||
echo "同步: ${repo_name}"
|
||||
gitea_create_repo "$repo_name"
|
||||
|
||||
mkdir -p "$WORK_DIR"
|
||||
cd "$WORK_DIR"
|
||||
if [ -d "${repo_name}.git" ]; then
|
||||
cd "${repo_name}.git"
|
||||
git fetch --all --prune
|
||||
git fetch --tags --prune
|
||||
else
|
||||
git clone --mirror "$gh_url" "${repo_name}.git"
|
||||
cd "${repo_name}.git"
|
||||
fi
|
||||
git push --mirror "$gitea_url" || { echo " 警告: ${repo_name} 推送失败"; return 1; }
|
||||
echo " 完成: ${repo_name}"
|
||||
}
|
||||
|
||||
mkdir -p "$WORK_DIR"
|
||||
while read -r repo_name; do
|
||||
[ -z "$repo_name" ] && continue
|
||||
sync_one "$repo_name" || true
|
||||
done < <(get_repos)
|
||||
|
||||
echo "全部同步完成。Gitea: ${GITEA_BASE}/${GITEA_USER}"
|
||||
@@ -1,7 +1,16 @@
|
||||
# Gitea 推送 — 卡若AI 调用手册
|
||||
|
||||
> 凭证与接口记录,下次调用直接读本文件 + 00_账号与API索引 § Gitea
|
||||
> 路径:`_共享模块/references/Gitea推送_卡若AI调用手册.md`
|
||||
> 凭证与接口记录,下次调用直接读**Gitea管理 Skill** + 本文件。
|
||||
> **Skill 路径**:`01_卡资(金)/_团队成员/金仓/Gitea管理/SKILL.md`
|
||||
> **本文件路径**:`_共享模块/references/Gitea推送_卡若AI调用手册.md`
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 强制规则(必须遵守)
|
||||
|
||||
1. **新建仓库**:必须通过 Gitea API 或 Web 创建,**禁止** SSH 手动 `mkdir+git init --bare`,否则不会显示在 Gitea 界面
|
||||
2. **推送方式**:统一用 **HTTPS**(账号密码),不用 SSH
|
||||
3. **HTTPS 访问**:`http://open.quwanzhi.com:3000/fnvtk/{仓库名}` 可直接打开
|
||||
|
||||
---
|
||||
|
||||
@@ -12,52 +21,49 @@
|
||||
| 地址 | http://open.quwanzhi.com:3000 |
|
||||
| 账号 | fnvtk |
|
||||
| 密码 | Zhiqun1984 |
|
||||
| SSH 端口 | 22201 |
|
||||
| HTTPS 克隆/推送 | `http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/{仓库名}.git` |
|
||||
|
||||
---
|
||||
|
||||
## 二、推送方式
|
||||
## 二、推送方式(HTTPS 优先)
|
||||
|
||||
### 2.1 SSH 推送(推荐,无需 token)
|
||||
|
||||
```bash
|
||||
# 远程 URL 格式
|
||||
ssh://fnvtk@open.quwanzhi.com:22201/volume1/git/github/fnvtk/{仓库名}.git
|
||||
|
||||
# 推送命令(需 sshpass 或 SSH 密钥)
|
||||
GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes256-cbc -p 22201" \
|
||||
sshpass -p 'Zhiqun1984' git push gitea main
|
||||
```
|
||||
|
||||
### 2.2 HTTP 推送(账号密码嵌入 URL)
|
||||
### 2.1 日常推送(已有仓库)
|
||||
|
||||
```bash
|
||||
git remote add gitea "http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/{仓库名}.git"
|
||||
git push gitea main
|
||||
```
|
||||
|
||||
> ⚠️ Gitea 默认禁用「推送即创建」,新建仓库需先 SSH 到 NAS 手动创建 bare 仓库。
|
||||
|
||||
### 2.3 新建仓库(SSH 到 NAS)
|
||||
### 2.2 新建仓库(必须用 API,才能显示在 Gitea 界面)
|
||||
|
||||
```bash
|
||||
sshpass -p 'Zhiqun1984' ssh -o StrictHostKeyChecking=no -o KexAlgorithms=+diffie-hellman-group1-sha1 -o Ciphers=+aes256-cbc -p 22201 fnvtk@open.quwanzhi.com \
|
||||
"mkdir -p /volume1/git/github/fnvtk/新仓库名.git && cd /volume1/git/github/fnvtk/新仓库名.git && git init --bare && echo 'ref: refs/heads/main' > HEAD"
|
||||
# 用 Basic Auth 创建仓库(fnvtk:Zhiqun1984)
|
||||
curl -u "fnvtk:Zhiqun1984" -X POST "http://open.quwanzhi.com:3000/api/v1/user/repos" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name":"仓库名","description":"描述","private":false}'
|
||||
|
||||
# 然后添加 remote 并推送
|
||||
git remote add gitea "http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/仓库名.git"
|
||||
git push -u gitea main
|
||||
```
|
||||
|
||||
> 禁止用 SSH 手动创建 bare 仓库,否则 Gitea 数据库无记录,界面不显示。
|
||||
|
||||
---
|
||||
|
||||
## 三、已配置仓库
|
||||
|
||||
| 仓库 | 路径 | 远程名 |
|
||||
|------|------|--------|
|
||||
| 卡若AI | /Users/karuo/Documents/个人/卡若AI | gitea |
|
||||
| 分布式算力矩阵 | /Users/karuo/Documents/1、金:项目/3、自营项目/分布式算力矩阵 | gitea |
|
||||
| 仓库 | 路径 | Gitea URL | 远程名 |
|
||||
|------|------|-----------|--------|
|
||||
| 卡若AI | /Users/karuo/Documents/个人/卡若AI | http://open.quwanzhi.com:3000/fnvtk/karuo-ai | gitea |
|
||||
| 分布式算力矩阵 | /Users/karuo/Documents/1、金:项目/3、自营项目/分布式算力矩阵 | http://open.quwanzhi.com:3000/fnvtk/suanli-juzhen | gitea |
|
||||
|
||||
---
|
||||
|
||||
## 四、卡若AI 调用流程
|
||||
|
||||
1. 读本文件 + `00_账号与API索引` § Gitea
|
||||
2. 取凭证:fnvtk / Zhiqun1984
|
||||
3. 推送:`sshpass -p 'Zhiqun1984' git push gitea main`(或对应 remote 名)
|
||||
1. **读 Gitea管理 Skill**:`01_卡资(金)/_团队成员/金仓/Gitea管理/SKILL.md`
|
||||
2. 读本文件 + `00_账号与API索引` § Gitea
|
||||
3. 取凭证:fnvtk / Zhiqun1984
|
||||
4. **新建仓库**:用 API `curl -u fnvtk:Zhiqun1984` 创建
|
||||
5. **推送**:`git push gitea main`(remote 用 HTTPS URL)
|
||||
|
||||
@@ -59,10 +59,10 @@ updated: "2026-01-31"
|
||||
|:---|:---|:---|
|
||||
| **金剑** | 服务器+监控 | 服务器管理、系统监控 |
|
||||
| **金盾** | 数据+安全+部署 | 数据库管理、存客宝、微信管理、远程环境一键部署 |
|
||||
| **金仓** | 存储+备份 | 群晖NAS管理、磁盘清理、容灾备份、照片分类 |
|
||||
| **金仓** | 存储+备份 | 群晖NAS管理、Gitea管理、磁盘清理、容灾备份、照片分类 |
|
||||
| **金链** | 设备+网络 | iPhone管理、局域网控制、iCloud管理 |
|
||||
|
||||
### Skills 明细(13个)
|
||||
### Skills 明细(14个)
|
||||
|
||||
| Skill | 触发词 | SKILL.md 路径 |
|
||||
|:---|:---|:---|
|
||||
@@ -73,6 +73,7 @@ updated: "2026-01-31"
|
||||
| 微信管理 | 微信分析、RFM、聊天记录 | `01_卡资(金)/_团队成员/金盾/微信管理/SKILL.md` |
|
||||
| 远程环境一键部署 | 远程部署、装Clash、装Cursor | `01_卡资(金)/_团队成员/金盾/远程环境一键部署/SKILL.md` |
|
||||
| 群晖NAS管理 | NAS、群晖、Docker | `01_卡资(金)/_团队成员/金仓/群晖NAS管理/SKILL.md` |
|
||||
| Gitea管理 | Gitea、推送到Gitea、创建仓库、Git推送CKB、界面不显示 | `01_卡资(金)/_团队成员/金仓/Gitea管理/SKILL.md` |
|
||||
| 磁盘清理 | 清理磁盘、释放空间 | `01_卡资(金)/_团队成员/金仓/磁盘清理/SKILL.md` |
|
||||
| 容灾备份 | 备份、git stash、灾备 | `01_卡资(金)/_团队成员/金仓/容灾备份/SKILL.md` |
|
||||
| 照片分类 | 照片整理、相册分类 | `01_卡资(金)/_团队成员/金仓/照片分类/SKILL.md` |
|
||||
@@ -235,7 +236,7 @@ from _共享模块.local_llm import summarize, classify, generate_questions
|
||||
|
||||
| 角色 | 成员数 | Skills数 |
|
||||
|:---|:---|:---|
|
||||
| 卡资(金) | 4 | 13 |
|
||||
| 卡资(金) | 4 | 14 |
|
||||
| 卡人(水) | 3 | 9 |
|
||||
| 卡木(木) | 3 | 5 |
|
||||
| 卡火(火) | 4 | 6 |
|
||||
|
||||
@@ -68,9 +68,10 @@
|
||||
| 地址 | http://open.quwanzhi.com:3000 |
|
||||
| 账号 | `fnvtk` |
|
||||
| 密码 | `Zhiqun1984` |
|
||||
| SSH 推送 | `ssh://fnvtk@open.quwanzhi.com:22201/volume1/git/github/fnvtk/{repo}.git` |
|
||||
| HTTP 推送 | `http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/{repo}.git` |
|
||||
| 说明 | 卡若AI 下次调用直接读本表推送;新建仓库需 SSH 到 NAS 执行 `mkdir -p /volume1/git/github/fnvtk/xxx.git && cd xxx.git && git init --bare` |
|
||||
| **HTTPS 推送** | `http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/{repo}.git` |
|
||||
| HTTPS 访问 | http://open.quwanzhi.com:3000/fnvtk/{repo} |
|
||||
| 新建仓库 API | `curl -u fnvtk:Zhiqun1984 -X POST http://open.quwanzhi.com:3000/api/v1/user/repos -H "Content-Type: application/json" -d '{"name":"xxx","description":"","private":false}'` |
|
||||
| 说明 | 必须用 API 或 Web 创建仓库才能显示在界面;禁止 SSH mkdir+init;推送统一用 HTTPS |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user