Spaces:
Running
Running
| set -e # 遇到错误立即停止 | |
| # ========== 配置 ========== | |
| WORKSPACE="/home/cpp_competition" # 你的开发目录(只读源) | |
| BACKUP_DIR="/tmp/git_backup_$(date +%s)" # 临时备份目录 | |
| REPO_URL="https://${GH_TOKEN}@github.com/${GH_USERNAME}/${REPO_NAME}.git" | |
| BRANCH_BACKUP="auto-backup" | |
| # ========== 在隔离环境备份 ========== | |
| echo "[$(date)] Starting isolated backup..." | |
| # 1. 克隆仓库到临时目录 | |
| # 优先尝试克隆备份分支,如果不存在则克隆主分支 | |
| if git clone --depth 1 --branch "$BRANCH_BACKUP" "$REPO_URL" "$BACKUP_DIR" 2>/dev/null; then | |
| echo "Cloned existing $BRANCH_BACKUP branch." | |
| else | |
| echo "Backup branch not found, cloning main branch." | |
| git clone --depth 1 --branch "main" "$REPO_URL" "$BACKUP_DIR" | |
| fi | |
| cd "$BACKUP_DIR" | |
| # 2. 确保在备份分支上 | |
| git checkout -b "$BRANCH_BACKUP" 2>/dev/null || git checkout "$BRANCH_BACKUP" | |
| # 3. 将工作目录的文件同步过来(排除.git目录) | |
| echo "Syncing files from workspace..." | |
| rsync -av --delete --exclude='.git/' "$WORKSPACE/" ./ | |
| # 4. 检查、提交、推送 | |
| if [[ -n $(git status --porcelain) ]]; then | |
| git add -A | |
| git commit -m "Auto-commit: $(date '+%Y-%m-%d %H:%M:%S')" | |
| # 推送时将使用全局配置的凭证 | |
| if git push origin "$BRANCH_BACKUP"; then | |
| echo "[$(date)] Backup succeeded to $BRANCH_BACKUP." | |
| else | |
| echo "[$(date)] ERROR: Push failed. Check your credentials." >&2 | |
| exit 1 | |
| fi | |
| else | |
| echo "[$(date)] No changes to backup." | |
| fi | |
| # 5. 清理临时目录 | |
| cd / | |
| rm -rf "$BACKUP_DIR" | |
| echo "[$(date)] Backup process completed." |