🔄 卡若AI 同步 2026-03-08 00:32 | 更新:金仓Gitea脚本与配置、运营中枢工作台 | 排除 >20MB: 11 个
This commit is contained in:
@@ -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 推送+大仓防超时 |
|
||||
|
||||
102
01_卡资(金)/金仓_存储备份/Gitea管理/references/命令行建仓与推送流程.md
Normal file
102
01_卡资(金)/金仓_存储备份/Gitea管理/references/命令行建仓与推送流程.md
Normal 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,避免密码大小写问题 |
|
||||
|
||||
---
|
||||
|
||||
## 二、步骤 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;大仓在终端直接跑 |
|
||||
17
01_卡资(金)/金仓_存储备份/Gitea管理/脚本/push_soul_yongping.sh
Executable file
17
01_卡资(金)/金仓_存储备份/Gitea管理/脚本/push_soul_yongping.sh
Executable 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
|
||||
59
01_卡资(金)/金仓_存储备份/Gitea管理/脚本/sync_soul_yongping.sh
Executable file
59
01_卡资(金)/金仓_存储备份/Gitea管理/脚本/sync_soul_yongping.sh
Executable 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
|
||||
29
01_卡资(金)/金仓_存储备份/Gitea管理/脚本/watch_and_sync_soul_yongping.sh
Executable file
29
01_卡资(金)/金仓_存储备份/Gitea管理/脚本/watch_and_sync_soul_yongping.sh
Executable 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 后自动同步到 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
|
||||
83
01_卡资(金)/金仓_存储备份/Gitea管理/脚本/生成变更说明_soul_yongping.py
Executable file
83
01_卡资(金)/金仓_存储备份/Gitea管理/脚本/生成变更说明_soul_yongping.py
Executable 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()
|
||||
Reference in New Issue
Block a user