Spaces:
Sleeping
Sleeping
Update autocommit.sh
Browse files- autocommit.sh +47 -41
autocommit.sh
CHANGED
|
@@ -1,49 +1,55 @@
|
|
| 1 |
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
-
#
|
| 4 |
-
|
| 5 |
|
| 6 |
-
#
|
| 7 |
-
|
| 8 |
-
|
| 9 |
|
| 10 |
-
#
|
| 11 |
if [[ -n $(git status --porcelain) ]]; then
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
git
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
#
|
| 20 |
-
if
|
| 21 |
-
|
| 22 |
-
if git fetch origin $TARGET_BRANCH 2>/dev/null; then
|
| 23 |
-
git checkout -b $TARGET_BRANCH origin/$TARGET_BRANCH
|
| 24 |
-
else
|
| 25 |
-
# 远程也不存在,基于当前基准分支创建新分支
|
| 26 |
-
git checkout -b $TARGET_BRANCH
|
| 27 |
-
fi
|
| 28 |
else
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
# 合并基准分支的最新更改(保持备份分支同步)
|
| 32 |
-
git merge $BASE_BRANCH --no-commit 2>/dev/null || true
|
| 33 |
fi
|
| 34 |
-
|
| 35 |
-
# 6. 添加所有更改并提交
|
| 36 |
-
git add .
|
| 37 |
-
git commit -m "Auto-commit: $(date '+%Y-%m-%d %H:%M:%S')"
|
| 38 |
-
|
| 39 |
-
# 7. 推送到远程的目标分支
|
| 40 |
-
git push origin $TARGET_BRANCH
|
| 41 |
-
echo "[$(date)] Auto-commit pushed to branch: $TARGET_BRANCH"
|
| 42 |
-
|
| 43 |
-
# 8. 切换回基准分支
|
| 44 |
-
git checkout $BASE_BRANCH
|
| 45 |
-
echo "[$(date)] Switched back to branch: $BASE_BRANCH"
|
| 46 |
-
|
| 47 |
else
|
| 48 |
-
echo "[$(date)] No changes to
|
| 49 |
-
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
#!/bin/bash
|
| 2 |
+
set -e # 遇到错误立即停止
|
| 3 |
+
|
| 4 |
+
# ========== 配置 ==========
|
| 5 |
+
WORKSPACE="/home/cpp_competition" # 你的开发目录(只读源)
|
| 6 |
+
BACKUP_DIR="/tmp/git_backup_$(date +%s)" # 临时备份目录
|
| 7 |
+
# 注意:这里使用干净URL,依赖全局凭证
|
| 8 |
+
REPO_URL="https://github.com/$(cat /run/secrets/GH_USERNAME)/$(cat /run/secrets/REPO_NAME).git"
|
| 9 |
+
BRANCH_BACKUP="auto-backup"
|
| 10 |
+
|
| 11 |
+
# ========== 在隔离环境备份 ==========
|
| 12 |
+
echo "[$(date)] Starting isolated backup..."
|
| 13 |
+
|
| 14 |
+
# 1. 克隆仓库到临时目录
|
| 15 |
+
# 优先尝试克隆备份分支,如果不存在则克隆主分支
|
| 16 |
+
if git clone --depth 1 --branch "$BRANCH_BACKUP" "$REPO_URL" "$BACKUP_DIR" 2>/dev/null; then
|
| 17 |
+
echo "Cloned existing $BRANCH_BACKUP branch."
|
| 18 |
+
else
|
| 19 |
+
echo "Backup branch not found, cloning main branch."
|
| 20 |
+
git clone --depth 1 --branch "main" "$REPO_URL" "$BACKUP_DIR"
|
| 21 |
+
fi
|
| 22 |
+
|
| 23 |
+
cd "$BACKUP_DIR"
|
| 24 |
|
| 25 |
+
# 2. 确保在备份分支上
|
| 26 |
+
git checkout -b "$BRANCH_BACKUP" 2>/dev/null || git checkout "$BRANCH_BACKUP"
|
| 27 |
|
| 28 |
+
# 3. 将工作目录的文件同步过来(排除.git目录)
|
| 29 |
+
echo "Syncing files from workspace..."
|
| 30 |
+
rsync -av --delete --exclude='.git/' "$WORKSPACE/" ./
|
| 31 |
|
| 32 |
+
# 4. 检查、提交、推送
|
| 33 |
if [[ -n $(git status --porcelain) ]]; then
|
| 34 |
+
# 设置本次提交的作者信息(可自定义)
|
| 35 |
+
git config user.email "backup@system"
|
| 36 |
+
git config user.name "Backup Bot"
|
| 37 |
+
|
| 38 |
+
git add -A
|
| 39 |
+
git commit -m "Backup: $(date '+%Y-%m-%d %H:%M:%S')"
|
| 40 |
+
|
| 41 |
+
# 推送时将使用全局配置的凭证
|
| 42 |
+
if git push origin "$BRANCH_BACKUP"; then
|
| 43 |
+
echo "[$(date)] Backup succeeded to $BRANCH_BACKUP."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
else
|
| 45 |
+
echo "[$(date)] ERROR: Push failed. Check your credentials." >&2
|
| 46 |
+
exit 1
|
|
|
|
|
|
|
| 47 |
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
else
|
| 49 |
+
echo "[$(date)] No changes to backup."
|
| 50 |
+
fi
|
| 51 |
+
|
| 52 |
+
# 5. 清理临时目录
|
| 53 |
+
cd /
|
| 54 |
+
rm -rf "$BACKUP_DIR"
|
| 55 |
+
echo "[$(date)] Backup process completed."
|