🔄 卡若AI 同步 2026-03-08 00:32 | 更新:金仓Gitea脚本与配置、运营中枢工作台 | 排除 >20MB: 11 个

This commit is contained in:
2026-03-08 00:32:12 +08:00
parent 45135c5e2d
commit 00e5256189
8 changed files with 295 additions and 1 deletions

View File

@@ -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 推送+大仓防超时 |

View File

@@ -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避免密码大小写问题 |
---
## 二、步骤 1API 创建仓库
```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大仓在终端直接跑 |

View File

@@ -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

View File

@@ -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

View File

@@ -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 后自动同步到 GiteaCtrl+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

View File

@@ -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()