|
|
@@ -35,6 +35,65 @@ banner() {
|
|
|
echo -e "└─────────────────────────────────┘${N}"
|
|
|
}
|
|
|
|
|
|
+# ── Git 集成 ──────────────────────────────────────────
|
|
|
+
|
|
|
+is_git_repo() {
|
|
|
+ git -C "$SKILL_DIR" rev-parse --git-dir &>/dev/null
|
|
|
+}
|
|
|
+
|
|
|
+git_pull() {
|
|
|
+ # 写前拉取:获取其他用户的最新进化数据
|
|
|
+ if ! is_git_repo; then return 0; fi
|
|
|
+ if ! git -C "$SKILL_DIR" remote get-url origin &>/dev/null; then return 0; fi
|
|
|
+
|
|
|
+ log "git pull: 获取共享进化数据..."
|
|
|
+ if git -C "$SKILL_DIR" pull --ff-only origin master 2>/dev/null; then
|
|
|
+ ok "git pull 完成"
|
|
|
+ # 有新数据 → 编译所有已变更题材的事件
|
|
|
+ local changed_genres
|
|
|
+ changed_genres=$(git -C "$SKILL_DIR" diff --name-only HEAD@{1}..HEAD -- evolution/genres/ 2>/dev/null \
|
|
|
+ | grep -oP 'evolution/genres/\K[^/]+' | sort -u || echo "")
|
|
|
+ if [[ -n "$changed_genres" ]]; then
|
|
|
+ for gid in $changed_genres; do
|
|
|
+ log " 编译题材: $gid"
|
|
|
+ $PYTHON "$SCRIPT_DIR/event_store.py" compile --genre "$gid" 2>/dev/null || true
|
|
|
+ done
|
|
|
+ fi
|
|
|
+ else
|
|
|
+ warn "git pull 失败(网络不通或无可更新),继续本地进化"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+git_push_events() {
|
|
|
+ # 写后推送:将本次进化事件提交并推送到远程
|
|
|
+ if ! is_git_repo; then return 0; fi
|
|
|
+ if ! git -C "$SKILL_DIR" remote get-url origin &>/dev/null; then return 0; fi
|
|
|
+
|
|
|
+ # 检查 evolution/genres/ 下是否有变更(新事件、编译产物、阈值等)
|
|
|
+ local has_changes
|
|
|
+ has_changes=$(git -C "$SKILL_DIR" status --porcelain -- evolution/genres/ 2>/dev/null || echo "")
|
|
|
+
|
|
|
+ if [[ -z "$has_changes" ]]; then
|
|
|
+ log "git: 无变更,跳过推送"
|
|
|
+ return 0
|
|
|
+ fi
|
|
|
+
|
|
|
+ log "git: 提交并推送进化数据..."
|
|
|
+
|
|
|
+ # 汇总变更的题材
|
|
|
+ local summary
|
|
|
+ summary=$(echo "$has_changes" | sed 's|.*evolution/genres/||' | cut -d/ -f1 | sort -u | tr '\n' ',' | sed 's/,$//')
|
|
|
+
|
|
|
+ git -C "$SKILL_DIR" add evolution/genres/ 2>/dev/null || true
|
|
|
+ git -C "$SKILL_DIR" commit -m "evolve(${summary:-auto}): auto-commit evolution data" 2>/dev/null || true
|
|
|
+
|
|
|
+ if git -C "$SKILL_DIR" push origin master 2>/dev/null; then
|
|
|
+ ok "git push 完成 ($(echo "$has_changes" | wc -l) 个文件)"
|
|
|
+ else
|
|
|
+ warn "git push 失败(网络不通),下次推送会包含本次变更"
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
# ── 查找项目 ──────────────────────────────────────────
|
|
|
|
|
|
find_project() {
|
|
|
@@ -206,6 +265,9 @@ phase_sync() {
|
|
|
main() {
|
|
|
banner
|
|
|
|
|
|
+ # 写前拉取:获取其他用户的最新进化数据
|
|
|
+ git_pull
|
|
|
+
|
|
|
local mode="${1:---quick}"
|
|
|
local project=""
|
|
|
|
|
|
@@ -307,6 +369,9 @@ print(map_genre_to_inkos_id(find_project_genre(Path('$project'))))
|
|
|
| sed "s|$EVOLUTION_DIR/genres/$genre_id/| |" || echo " (空)"
|
|
|
fi
|
|
|
fi
|
|
|
+
|
|
|
+ # 写后推送:将本次进化事件自动提交到 git
|
|
|
+ git_push_events
|
|
|
}
|
|
|
|
|
|
main "$@"
|