Spaces:
Sleeping
Sleeping
File size: 1,636 Bytes
d5b2fb4 d65a68e d54f10e d65a68e d5b2fb4 d65a68e d5b2fb4 d65a68e 08bab1f d65a68e d5b2fb4 d65a68e 61ae4a8 d65a68e 08bab1f d65a68e 08bab1f d5b2fb4 d65a68e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #!/bin/bash
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." |