LAST233 commited on
Commit
d65a68e
·
verified ·
1 Parent(s): 245bda0

Update autocommit.sh

Browse files
Files changed (1) hide show
  1. autocommit.sh +47 -41
autocommit.sh CHANGED
@@ -1,49 +1,55 @@
1
  #!/bin/bash
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
- # 进入你的代码仓库目录
4
- cd /home/cpp_competition || exit 1
5
 
6
- # 2. 定义分支名称
7
- TARGET_BRANCH="auto-backup" # 专门用于自动提交的分支
8
- BASE_BRANCH="main" # 基准分支,完成后切换回来
9
 
10
- # 3. 检查是否有文件变动
11
  if [[ -n $(git status --porcelain) ]]; then
12
- echo "[$(date)] Changes detected. Starting auto-commit process..."
13
-
14
- # 4. 确保位于基准分支,并获取最新代码(可选,避免冲突)
15
- git checkout $BASE_BRANCH
16
- git pull origin $BASE_BRANCH
17
-
18
- # 5. 创建或切换到目标分支
19
- # 检查目标分支是否存在(本地或远程)
20
- if ! git show-ref --verify --quiet refs/heads/$TARGET_BRANCH; then
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
- git checkout $TARGET_BRANCH
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 commit. Staying on current branch."
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."