codeserver / autocommit.sh
LAST233's picture
Update autocommit.sh
d54f10e verified
#!/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."