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."