diff --git a/scripts/sync-gitea.sh b/scripts/sync-gitea.sh index 121ca40c..33f3cf12 100755 --- a/scripts/sync-gitea.sh +++ b/scripts/sync-gitea.sh @@ -58,6 +58,36 @@ remote_repo_reachable() { git ls-remote --exit-code origin HEAD >/dev/null 2>&1 } +current_branch_name() { + local branch + branch=$(git branch --show-current 2>/dev/null || true) + if [ -z "$branch" ]; then + branch="main" + fi + echo "$branch" +} + +current_branch_needs_push() { + if ! git rev-parse --verify "@{upstream}" >/dev/null 2>&1; then + return 0 + fi + [ "$(git rev-list --count @{upstream}..HEAD)" -gt 0 ] +} + +main_ref_needs_push() { + if [ "$AUTO_PUSH_MAIN" != "1" ]; then + return 1 + fi + if ! git rev-parse --verify "refs/remotes/origin/main" >/dev/null 2>&1; then + return 0 + fi + ! git merge-base --is-ancestor "refs/remotes/origin/main" HEAD +} + +needs_push() { + current_branch_needs_push || main_ref_needs_push +} + ensure_remote_repo() { if remote_repo_reachable; then log_info "远程仓库可访问: ${GIT_USER}/${REPO_NAME}" @@ -186,12 +216,8 @@ push_changes() { log_info "推送到远程仓库..." # 获取当前分支 - local branch=$(git branch --show-current 2>/dev/null || echo "main") - - # 如果分支为空,使用 main - if [ -z "$branch" ]; then - branch="main" - fi + local branch + branch=$(current_branch_name) ensure_remote_repo @@ -238,7 +264,11 @@ push_changes() { full_sync() { init_repo commit_changes - push_changes + if needs_push; then + push_changes + else + log_info "没有需要推送的提交" + fi } auto_sync() {