diff --git a/01_卡资(金)/金仓_存储备份/Gitea管理/SKILL.md b/01_卡资(金)/金仓_存储备份/Gitea管理/SKILL.md index 1b8591a1..ef9989ea 100644 --- a/01_卡资(金)/金仓_存储备份/Gitea管理/SKILL.md +++ b/01_卡资(金)/金仓_存储备份/Gitea管理/SKILL.md @@ -31,7 +31,7 @@ CKB NAS 自建 Gitea 的**创建、推送、API、挂载**统一管理。Git 相 | 地址 | http://open.quwanzhi.com:3000 | | 账号 | fnvtk | | 密码 | Zhiqun1984 | -| HTTPS 推送 URL | `http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/{仓库名}.git` | +| HTTPS 推送 URL | `http://fnvtk:Zhiqun1984@open.quwanzhi.com:3000/fnvtk/{仓库名}.git`(密码小写 zhiqun1984 更稳;大仓用 Token 见 `references/命令行建仓与推送流程.md`) | | 存储路径(NAS) | `/volume1/git/github/fnvtk/{仓库名}.git` | --- @@ -125,6 +125,7 @@ git push -u gitea main |------|------|------| | 卡若AI | `bash 01_卡资(金)/金仓_存储备份/Gitea管理/脚本/自动同步.sh` | 代码+百科+代码管理 | | 分布式算力矩阵 | `bash 01_卡资(金)/金仓_存储备份/Gitea管理/脚本/auto_sync_suanli_juzhen.sh` | 代码 | +| soul-yongping(永平网站) | `push_soul_yongping.sh` 首次推送;`sync_soul_yongping.sh` 有变更时同步;`watch_and_sync_soul_yongping.sh` 监控本地变更并自动同步 | 提交说明写清变更内容与修改原因 | **Webhook 说明**:Webhook 是 Gitea→外部(push 后通知飞书/触发部署),**不能**实现本地→Gitea。本地→Gitea 用上述脚本,可定时执行或对话结束时执行。详见 `references/Webhook与本地协同方案.md`。 @@ -151,3 +152,4 @@ git push -u gitea main | 工单/合并请求/Wiki/发布 | `运营中枢/references/Gitea_工单与合并请求使用说明.md` | 各功能使用说明 | | 代码管理 | `运营中枢/工作台/代码管理.md` | 每次上传记录 | | 账号与 API | `运营中枢/工作台/00_账号与API索引.md` § Gitea | 凭证 | +| 命令行建仓与推送 | `Gitea管理/references/命令行建仓与推送流程.md` | 全命令行建仓+Token 推送+大仓防超时 | diff --git a/01_卡资(金)/金仓_存储备份/Gitea管理/references/命令行建仓与推送流程.md b/01_卡资(金)/金仓_存储备份/Gitea管理/references/命令行建仓与推送流程.md new file mode 100644 index 00000000..2f1127d0 --- /dev/null +++ b/01_卡资(金)/金仓_存储备份/Gitea管理/references/命令行建仓与推送流程.md @@ -0,0 +1,102 @@ +# Gitea 命令行建仓与推送流程(已验证) + +> 全命令行完成,无需在网页新建仓库。最后验证:2026-03-07 + +--- + +## 一、前置条件 + +| 项 | 值 | +|----|-----| +| Gitea 地址 | http://open.quwanzhi.com:3000 | +| 账号 | fnvtk | +| 密码(API/网页) | zhiqun1984(小写;群晖 NAS SKILL 中说明) | +| 建仓 Token | 需含 `write:user`;示例:`07f82fbd81a64fb714d9a6c47b11cc5b98f2fa2e` | +| 推送 | 建议用 Token 内嵌 URL,避免密码大小写问题 | + +--- + +## 二、步骤 1:API 创建仓库 + +```bash +# 通过 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}' +``` + +> 若 API 报 `password invalid`,检查密码是否为小写 `zhiqun1984`;若 Token 建仓,需 `write:user` 权限。 + +--- + +## 三、步骤 2:本地添加远程并推送 + +### 3.1 小仓库(<20MB) + +```bash +cd /path/to/repo +git remote add gitea "http://fnvtk:zhiqun1984@open.quwanzhi.com:3000/fnvtk/仓库名.git" +git push -u gitea main +``` + +### 3.2 大仓库或直连不稳时(推荐) + +**必须**:取消代理 + 使用 HTTP/1.1,避免挂起或超时。 + +```bash +cd /path/to/repo + +# 用 Token 内嵌 URL(推荐) +NEW_TOKEN='你的Token' +git remote add gitea "http://fnvtk:${NEW_TOKEN}@open.quwanzhi.com:3000/fnvtk/仓库名.git" + +# 取消代理,直连 Gitea +unset HTTP_PROXY HTTPS_PROXY ALL_PROXY + +# 使用 HTTP/1.1 推送(避免代理/HTTP2 导致的问题) +GIT_HTTP_VERSION=HTTP/1.1 git push -u gitea main +``` + +> 大仓库(如 ~40MB)上传约需 2.5 分钟,确保执行环境无超时限制;若在 Cursor 内执行易超时,建议在终端直接运行。 + +--- + +## 四、已验证项目 + +| 项目 | 本地路径 | Gitea 仓库 | 备注 | +|------|----------|------------|------| +| 一场soul的创业实验 | `个人/2、我写的书/《一场soul的创业实验》` | fnvtk/Mycontent | 已推送成功 | +| 一场soul的创业实验-永平 | `开发/3、自营项目/一场soul的创业实验-永平` | fnvtk/soul-yongping | 大仓库,需直连+无超时 | + +--- + +## 五、soul-yongping 同步与监控 + +| 脚本 | 说明 | +|------|------| +| `push_soul_yongping.sh` | 首次推送或手动推送 | +| `sync_soul_yongping.sh` | 有变更时同步(提交说明含变更内容与修改原因) | +| `watch_and_sync_soul_yongping.sh` | 监控本地文件变更,停止修改 3 秒后自动同步到 Gitea | + +永平项目约 39MB,首次推送需在终端运行 `push_soul_yongping.sh`(避免 Cursor 超时)。 + +手动执行推送: + +```bash +cd "/Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平" +NEW_TOKEN='07f82fbd81a64fb714d9a6c47b11cc5b98f2fa2e' +git remote set-url gitea "http://fnvtk:${NEW_TOKEN}@open.quwanzhi.com:3000/fnvtk/soul-yongping.git" +unset HTTP_PROXY HTTPS_PROXY ALL_PROXY +GIT_HTTP_VERSION=HTTP/1.1 git push -u gitea main +``` + +--- + +## 六、故障排查 + +| 现象 | 处理 | +|------|------| +| API `password invalid` | 密码改为小写 `zhiqun1984` | +| 建仓 403 | Token 需含 `write:user` | +| push 挂起/超时 | `unset` 代理,用 `GIT_HTTP_VERSION=HTTP/1.1` | +| 远端仍 empty | 确认 push 已完整执行,无中途 kill;大仓在终端直接跑 | diff --git a/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/push_soul_yongping.sh b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/push_soul_yongping.sh new file mode 100755 index 00000000..77518103 --- /dev/null +++ b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/push_soul_yongping.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# ============================================ +# soul-yongping → Gitea 推送(大仓库,需直连+无超时) +# 用法:bash 本脚本 或 在终端直接运行(避免 Cursor 120s 超时) +# ============================================ + +REPO="/Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平" +REMOTE="gitea" +BRANCH="main" +# Token 需 write:user;来源:00_账号与API索引 或 Gitea 设置→应用→生成 +TOKEN='07f82fbd81a64fb714d9a6c47b11cc5b98f2fa2e' + +cd "$REPO" || { echo "错误:目录不存在 $REPO"; exit 1; } + +git remote set-url gitea "http://fnvtk:${TOKEN}@open.quwanzhi.com:3000/fnvtk/soul-yongping.git" 2>/dev/null +unset HTTP_PROXY HTTPS_PROXY ALL_PROXY +GIT_HTTP_VERSION=HTTP/1.1 git push --progress -u gitea main diff --git a/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/sync_soul_yongping.sh b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/sync_soul_yongping.sh new file mode 100755 index 00000000..3186156f --- /dev/null +++ b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/sync_soul_yongping.sh @@ -0,0 +1,59 @@ +#!/bin/bash +# ============================================ +# soul-yongping → Gitea 同步(有变更则提交+推送) +# 提交说明写清:变更内容 + 修改原因(由 生成变更说明_soul_yongping.py 生成) +# 用法:bash 本脚本;或被 watch_and_sync_soul_yongping.sh 调用 +# ============================================ + +REPO="/Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平" +REMOTE="gitea" +BRANCH="main" +TOKEN='07f82fbd81a64fb714d9a6c47b11cc5b98f2fa2e' +LOG_FILE="/Users/karuo/Documents/个人/卡若AI/01_卡资(金)/金仓_存储备份/Gitea管理/sync_soul_yongping.log" +SCRIPT_DIR="$(dirname "$0")" +SUMMARY_SCRIPT="$SCRIPT_DIR/生成变更说明_soul_yongping.py" + +log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"; } + +cd "$REPO" || { log "错误:目录不存在 $REPO"; exit 1; } + +# 设置 remote URL(含 Token) +git remote set-url gitea "http://fnvtk:${TOKEN}@open.quwanzhi.com:3000/fnvtk/soul-yongping.git" 2>/dev/null + +# 检查是否有变更 +git add -A 2>/dev/null +if git diff --cached --quiet 2>/dev/null; then + log "无变更,跳过同步" + exit 0 +fi + +# 生成提交说明(变更内容 | 原因) +TIMESTAMP=$(date '+%Y-%m-%d %H:%M') +if [ -f "$SUMMARY_SCRIPT" ]; then + SUMMARY=$(git diff --cached --name-only 2>/dev/null | python3 "$SUMMARY_SCRIPT" 2>/dev/null) + [ -z "$SUMMARY" ] && SUMMARY="本地开发更新" +else + SUMMARY="本地开发更新" +fi +COMMIT_MSG="sync: $SUMMARY" + +git commit -m "$COMMIT_MSG" --quiet 2>/dev/null +if [ $? -ne 0 ]; then + log "错误:提交失败" + exit 1 +fi +log "提交成功:$COMMIT_MSG" + +# 推送(直连、无代理、HTTP/1.1,避免超时) +unset HTTP_PROXY HTTPS_PROXY ALL_PROXY +GIT_HTTP_VERSION=HTTP/1.1 git push "$REMOTE" "$BRANCH" --quiet 2>&1 +PUSH_RESULT=$? + +if [ $PUSH_RESULT -eq 0 ]; then + log "推送成功 → gitea/$BRANCH" +else + log "推送失败(code=$PUSH_RESULT)" + exit 1 +fi + +exit 0 diff --git a/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/watch_and_sync_soul_yongping.sh b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/watch_and_sync_soul_yongping.sh new file mode 100755 index 00000000..dea55f63 --- /dev/null +++ b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/watch_and_sync_soul_yongping.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# ============================================ +# soul-yongping 文件监控 → 有更新自动同步到 Gitea +# 监控根目录(排除 node_modules、.git、dist),停止修改后 3 秒执行同步 +# 提交说明写清:变更内容 + 修改原因 +# 用法:bash 本脚本(后台运行,Ctrl+C 停止) +# ============================================ + +REPO="/Users/karuo/Documents/开发/3、自营项目/一场soul的创业实验-永平" +SYNC_SCRIPT="$(dirname "$0")/sync_soul_yongping.sh" +DEBOUNCE_SEC=3 + +cd "$REPO" || { echo "错误:目录不存在 $REPO"; exit 1; } +[ ! -x "$SYNC_SCRIPT" ] && chmod +x "$SYNC_SCRIPT" + +debounce_pid="" +do_sync() { + kill "$debounce_pid" 2>/dev/null + ( sleep $DEBOUNCE_SEC; bash "$SYNC_SCRIPT" ) & + debounce_pid=$! +} + +echo "[watch] 开始监控 soul-yongping,停止修改 ${DEBOUNCE_SEC}s 后自动同步到 Gitea(Ctrl+C 停止)" + +fswatch -0 -r -e "node_modules" -e ".git" -e "dist" -e "__pycache__" -e ".DS_Store" -e ".pnpm" "$REPO" 2>/dev/null | while IFS= read -r -d '' _; do + kill "$debounce_pid" 2>/dev/null + ( sleep $DEBOUNCE_SEC; bash "$SYNC_SCRIPT" ) & + debounce_pid=$! +done diff --git a/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/生成变更说明_soul_yongping.py b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/生成变更说明_soul_yongping.py new file mode 100755 index 00000000..4038fa1e --- /dev/null +++ b/01_卡资(金)/金仓_存储备份/Gitea管理/脚本/生成变更说明_soul_yongping.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# 根据 soul-yongping 项目 git diff --cached --name-only 输出,生成「变更内容」和「修改原因」 +# 用法:git diff --cached --name-only | python3 生成变更说明_soul_yongping.py + +import sys + +def label(p): + if not p or p.isspace(): + return None + p = p.strip() + if p.startswith('soul-admin/'): + if '/src/' in p and '/components/' in p: + return 'soul-admin 组件' + if '/src/' in p and '/pages/' in p: + return 'soul-admin 页面' + if 'tsconfig' in p or 'vite.config' in p or '.json' in p: + return 'soul-admin 配置' + return 'soul-admin 前端' + if p.startswith('soul-api/'): + if '/internal/handler/' in p: + return 'soul-api 接口逻辑' + if '/internal/router/' in p: + return 'soul-api 路由' + if 'go.mod' in p or 'go.sum' in p: + return 'soul-api 依赖' + return 'soul-api 后端' + if p.startswith('miniprogram/'): + if '.wxml' in p or '.wxss' in p: + return 'miniprogram 页面样式' + if '.js' in p: + return 'miniprogram 页面逻辑' + return 'miniprogram 小程序' + if p.startswith('scripts/') or p.startswith('.gitignore') or p.endswith('.sh'): + return '脚本与配置' + if 'Gitea' in p or 'gitea' in p: + return 'Gitea 同步配置' + return None + +def reason(labels): + """根据变更模块推导修改原因""" + if not labels: + return '本地开发更新' + m = { + 'soul-admin 组件': '前端组件修改', + 'soul-admin 页面': '前端页面修改', + 'soul-admin 配置': '前端构建配置修改', + 'soul-admin 前端': '前端代码修改', + 'soul-api 接口逻辑': '后端接口逻辑修改', + 'soul-api 路由': '后端路由修改', + 'soul-api 依赖': '后端依赖更新', + 'soul-api 后端': '后端代码修改', + 'miniprogram 页面样式': '小程序页面样式修改', + 'miniprogram 页面逻辑': '小程序页面逻辑修改', + 'miniprogram 小程序': '小程序代码修改', + '脚本与配置': '脚本或配置文件修改', + 'Gitea 同步配置': 'Gitea 同步配置修改', + } + reasons = [m.get(l, l) for l in labels] + if len(reasons) == 1: + return reasons[0] + if len(reasons) <= 3: + return '、'.join(reasons) + return '多模块开发更新' + +def main(): + raw = sys.stdin.buffer.read().decode('utf-8', errors='ignore').strip() + lines = [s.strip() for s in raw.splitlines() if s.strip()] + seen = [] + for p in lines: + l = label(p) + if l and l not in seen: + seen.append(l) + content = '、'.join(seen[:8]) + if len(seen) > 8: + content += '等' + if not content: + content = '多文件' + cause = reason(seen) + print(f"{content} | 原因: {cause}") + +if __name__ == '__main__': + main() diff --git a/运营中枢/工作台/gitea_push_log.md b/运营中枢/工作台/gitea_push_log.md index 3d841fcb..a3ce3d68 100644 --- a/运营中枢/工作台/gitea_push_log.md +++ b/运营中枢/工作台/gitea_push_log.md @@ -248,3 +248,4 @@ | 2026-03-06 13:24:04 | 🔄 卡若AI 同步 2026-03-06 13:24 | 更新:Cursor规则、水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 | | 2026-03-07 06:14:48 | 🔄 卡若AI 同步 2026-03-07 06:14 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 | | 2026-03-07 13:59:23 | 🔄 卡若AI 同步 2026-03-07 13:59 | 更新:水桥平台对接、卡木、运营中枢工作台 | 排除 >20MB: 11 个 | +| 2026-03-07 23:27:01 | 🔄 卡若AI 同步 2026-03-07 23:26 | 更新:金仓Gitea脚本与配置、运营中枢工作台 | 排除 >20MB: 11 个 | diff --git a/运营中枢/工作台/代码管理.md b/运营中枢/工作台/代码管理.md index 5b62cefd..0802db7b 100644 --- a/运营中枢/工作台/代码管理.md +++ b/运营中枢/工作台/代码管理.md @@ -251,3 +251,4 @@ | 2026-03-06 13:24:04 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-06 13:24 | 更新:Cursor规则、水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | | 2026-03-07 06:14:48 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-07 06:14 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | | 2026-03-07 13:59:23 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-07 13:59 | 更新:水桥平台对接、卡木、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | +| 2026-03-07 23:27:01 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-07 23:26 | 更新:金仓Gitea脚本与配置、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |