🔄 卡若AI 同步 2026-02-15 23:09 | 变更 5 个文件 | 排除 >20MB: 4 个
Some checks failed
Sync GitHub to CKB NAS Gitea / sync (push) Has been cancelled

This commit is contained in:
2026-02-15 23:09:39 +08:00
parent 82885b92f3
commit 34ff8c290b
5 changed files with 55 additions and 36 deletions

View File

@@ -20,6 +20,7 @@ alwaysApply: true
2. 读取 `_共享模块/references/卡若AI交互流程与强制执行条件.md`
3. 读取 `_共享模块/skill_router/SKILL.md` 技能索引
4. 同步文件到 D:\卡若ai排除超过1MB的大文件
5. **有更新就上传 Gitea**:若本次对话对工作台有文件变更,对话结束前执行 `_共享模块/auto_sync_gitea.sh`,将变更推送到 open.quwanzhi.com:3000/fnvtk/karuo-ai并建立推送记录见 `_共享模块/工作台/gitea_push_log.md`)。上传规则:单文件 >20MB 不提交、不推送。
## 统一执行流程(所有任务必守)
@@ -65,6 +66,7 @@ alwaysApply: true
**核心入口**`_共享模块/工作台/00_卡若AI总索引.md`
**Skill 路由表**`_共享模块/skill_router/SKILL.md`
**Gitea 同步**:有更新即执行 `bash _共享模块/auto_sync_gitea.sh` → 推送到 open.quwanzhi.com:3000/fnvtk/karuo-ai>20MB 不上传,记录见 `_共享模块/工作台/gitea_push_log.md`
## 大文件规则(强制)

7
.gitignore vendored
View File

@@ -77,3 +77,10 @@ _大文件外置/视频切片_models/ggml-small.bin
_大文件外置/财务管理_data/chat.snapshot_data.db
_大文件外置/财务管理_data/chat.snapshot_收集.db
# === 自动排除结束 ===
# === 自动排除超过20MB的文件脚本自动管理勿手动修改===
_大文件外置/消息中枢_dist/windows控制包.zip
_大文件外置/视频切片_models/ggml-small.bin
_大文件外置/财务管理_data/chat.snapshot_data.db
_大文件外置/财务管理_data/chat.snapshot_收集.db
# === 自动排除结束 ===

View File

@@ -1,23 +1,21 @@
#!/bin/bash
# ============================================
# 卡若AI 自动同步脚本
# 功能每5分钟自动提交并推送到存客宝NAS的Gitea
# 规则超过5MB的文件自动排除不上传
# 卡若AI → Gitea 实时同步open.quwanzhi.com:3000/fnvtk/karuo-ai
# 规则:超过 20MB 的文件不上传(与 Skill 目录规则一致)
# 推送成功后建立记录_共享模块/工作台/gitea_push_log.md
# ============================================
REPO_DIR="/Users/karuo/Documents/个人/卡若AI"
REMOTE="gitea"
BRANCH="main"
MAX_SIZE_MB=5
MAX_SIZE_MB=20
LOG_FILE="$REPO_DIR/_共享模块/sync.log"
PUSH_LOG="$REPO_DIR/_共享模块/工作台/gitea_push_log.md"
GITIGNORE="$REPO_DIR/.gitignore"
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"; }
# 限制日志文件大小(最大 500KB
# 限制 sync.log 大小
if [ -f "$LOG_FILE" ] && [ $(stat -f%z "$LOG_FILE" 2>/dev/null || echo 0) -gt 512000 ]; then
tail -100 "$LOG_FILE" > "$LOG_FILE.tmp" && mv "$LOG_FILE.tmp" "$LOG_FILE"
fi
@@ -25,19 +23,15 @@ fi
cd "$REPO_DIR" || { log "错误:无法进入目录 $REPO_DIR"; exit 1; }
# ============================================
# Step 1: 动态查找 >5MB 文件,更新 .gitignore
# Step 1: 排除 >20MB 文件(动态写入 .gitignore 区段)
# ============================================
MARKER_START="# === 自动排除:超过${MAX_SIZE_MB}MB的文件脚本自动管理勿手动修改==="
MARKER_END="# === 自动排除结束 ==="
# 查找所有 >5MB 的文件(排除 .git 目录)
LARGE_FILES=$(find . -type f -size +${MAX_SIZE_MB}M -not -path "./.git/*" 2>/dev/null | sort)
# 生成新的大文件排除列表
NEW_SECTION="$MARKER_START"
if [ -n "$LARGE_FILES" ]; then
while IFS= read -r file; do
# 去掉开头的 ./
clean_path="${file#./}"
NEW_SECTION="$NEW_SECTION
$clean_path"
@@ -46,10 +40,7 @@ fi
NEW_SECTION="$NEW_SECTION
$MARKER_END"
# 更新 .gitignore 中的自动管理区域
if grep -q "$MARKER_START" "$GITIGNORE" 2>/dev/null; then
# 已存在标记,替换区域内容
# 用 python 处理多行替换更可靠
python3 -c "
import re
with open('$GITIGNORE', 'r') as f:
@@ -60,45 +51,35 @@ with open('$GITIGNORE', 'w') as f:
f.write(new_content)
" 2>/dev/null
else
# 不存在标记,追加到末尾
echo "" >> "$GITIGNORE"
echo "$NEW_SECTION" >> "$GITIGNORE"
fi
LARGE_COUNT=$(echo "$LARGE_FILES" | grep -c '.' 2>/dev/null || echo 0)
log "大文件扫描:发现 $LARGE_COUNT超过 ${MAX_SIZE_MB}MB 的文件已排除"
log "大文件扫描:$LARGE_COUNT>${MAX_SIZE_MB}MB 已排除"
# ============================================
# Step 2: 检查是否有变更
# ============================================
git add -A 2>/dev/null
# 检查是否有需要提交的变更
if git diff --cached --quiet 2>/dev/null; then
log "无变更,跳过同步"
exit 0
fi
# ============================================
# Step 3: 自动提交
# Step 3: 提交
# ============================================
CHANGED_COUNT=$(git diff --cached --numstat | wc -l | tr -d ' ')
TIMESTAMP=$(date '+%Y-%m-%d %H:%M')
COMMIT_MSG="🔄 卡若AI 同步 $TIMESTAMP | 变更 ${CHANGED_COUNT} 个文件 | 排除 >${MAX_SIZE_MB}MB: ${LARGE_COUNT}"
git commit -m "$(cat <<EOF
🔄 自动同步 $TIMESTAMP
变更文件: ${CHANGED_COUNT} 个
排除大文件: ${LARGE_COUNT} 个 (>${MAX_SIZE_MB}MB)
EOF
)" --quiet 2>/dev/null
git commit -m "$COMMIT_MSG" --quiet 2>/dev/null
if [ $? -ne 0 ]; then
log "错误:提交失败"
exit 1
fi
log "提交成功:${CHANGED_COUNT} 个文件变更"
log "提交成功:${CHANGED_COUNT} 个文件"
# ============================================
# Step 4: 推送到 Gitea
@@ -107,15 +88,24 @@ git push "$REMOTE" "$BRANCH" --quiet 2>&1
PUSH_RESULT=$?
if [ $PUSH_RESULT -eq 0 ]; then
log "推送成功 → $REMOTE/$BRANCH"
log "推送成功 → gitea/$BRANCH"
# 建立推送记录
mkdir -p "$(dirname "$PUSH_LOG")"
if [ ! -f "$PUSH_LOG" ]; then
echo -e "# Gitea 推送记录\n\n> 卡若AI 有更新即同步到 open.quwanzhi.com:3000/fnvtk/karuo-ai\n\n| 时间 | 提交说明 |\n|:---|:---|" > "$PUSH_LOG"
fi
echo "| $(date '+%Y-%m-%d %H:%M:%S') | $COMMIT_MSG |" >> "$PUSH_LOG"
else
# 如果推送失败(可能远程有差异),尝试 force push
log "推送失败code=$PUSH_RESULT),尝试强制推送..."
git push "$REMOTE" "$BRANCH" --force --quiet 2>&1
if [ $? -eq 0 ]; then
log "强制推送成功 → $REMOTE/$BRANCH"
log "强制推送成功 → gitea/$BRANCH"
mkdir -p "$(dirname "$PUSH_LOG")"
[ ! -f "$PUSH_LOG" ] && echo -e "# Gitea 推送记录\n\n| 时间 | 提交说明 |\n|:---|:---|" > "$PUSH_LOG"
echo "| $(date '+%Y-%m-%d %H:%M:%S') | [强制] $COMMIT_MSG |" >> "$PUSH_LOG"
else
log "错误:强制推送也失败,需要手动处理"
log "错误:强制推送也失败"
exit 1
fi
fi

View File

@@ -67,3 +67,16 @@ git push -u gitea main
3. 取凭证fnvtk / Zhiqun1984
4. **新建仓库**:用 API `curl -u fnvtk:Zhiqun1984` 创建
5. **推送**`git push gitea main`remote 用 HTTPS URL
---
## 五、卡若AI 有更新就上传(实时同步 Gitea
| 项 | 说明 |
|:---|:---|
| **脚本** | `_共享模块/auto_sync_gitea.sh` |
| **目标** | http://open.quwanzhi.com:3000/fnvtk/karuo-ai |
| **规则** | 单文件 >20MB 不提交、不推送(与 Skill 目录规则一致) |
| **建立记录** | 每次推送成功写入 `_共享模块/工作台/gitea_push_log.md` |
**卡若AI 行为**:对话或任务对工作台产生文件变更后,在对话结束前执行一次 `bash _共享模块/auto_sync_gitea.sh`,使 Gitea 仓库保持最新状态。

View File

@@ -0,0 +1,7 @@
# Gitea 推送记录
> 卡若AI 有更新即同步到 **open.quwanzhi.com:3000/fnvtk/karuo-ai**
> 规则:单文件 >20MB 不上传,推送后在此建立记录。
| 时间 | 提交说明 |
|:---|:---|