本文目录导读:

是的,脚本可以自动同步代码到远程仓库,以下是几种常见的实现方式:
基础 Shell 脚本示例
#!/bin/bash
# 自动同步脚本
cd /path/to/your/repo
# 拉取最新代码
git pull origin main
# 添加所有更改
git add .
# 提交更改(如果有)
if git diff --cached --quiet; then
echo "没有更改需要提交"
else
git commit -m "自动同步: $(date '+%Y-%m-%d %H:%M:%S')"
git push origin main
echo "同步完成"
fi
处理冲突的脚本
#!/bin/bash
cd /path/to/your/repo
# 暂存本地更改
git stash
# 拉取最新代码
git pull origin main
# 恢复本地更改
git stash pop || {
echo "检测到冲突,尝试自动解决..."
git add -A
git commit -m "自动解决冲突: $(date)"
}
# 推送
git push origin main
Python 脚本示例
import os
import subprocess
from datetime import datetime
def sync_repo(repo_path, branch='main'):
os.chdir(repo_path)
# 拉取
subprocess.run(['git', 'pull', 'origin', branch])
# 检查是否有更改
result = subprocess.run(['git', 'status', '--porcelain'],
capture_output=True, text=True)
if result.stdout.strip():
# 有更改时提交并推送
subprocess.run(['git', 'add', '.'])
commit_msg = f"自动同步: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
subprocess.run(['git', 'commit', '-m', commit_msg])
subprocess.run(['git', 'push', 'origin', branch])
print("同步完成")
else:
print("没有更改需要同步")
# 使用
sync_repo('/path/to/your/repo')
定时自动同步
Linux (crontab)
# 每天凌晨2点同步 0 2 * * * /path/to/sync-script.sh # 每30分钟同步一次 */30 * * * * /path/to/sync-script.sh
Windows (任务计划程序)
# PowerShell 脚本 $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\scripts\sync.ps1" $trigger = New-ScheduledTaskTrigger -Daily -At 2am Register-ScheduledTask -TaskName "GitSync" -Action $action -Trigger $trigger
使用 Git Hooks
在 .git/hooks 目录下创建 post-commit 钩子:
#!/bin/bash # 每次提交后自动推送 git push origin HEAD
GitHub Actions 示例
name: Auto Sync
on:
schedule:
- cron: '0 */6 * * *' # 每6小时
workflow_dispatch: # 手动触发
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
persist-credentials: false
- name: Sync changes
run: |
git config user.name "Auto Sync"
git config user.email "auto@sync.com"
git add .
git commit -m "Auto sync $(date)" || exit 0
git push
注意事项
- 认证问题:使用 SSH key 或个人访问令牌,避免交互式输入密码
- 错误处理:添加错误处理和日志记录
- 冲突解决:制定清晰的冲突处理策略
- 权限控制:确保脚本有适当的执行权限
最佳实践建议
- 先用
--dry-run测试脚本 - 记录日志以便排查问题
- 设置通知机制(如邮件、Slack)
- 考虑使用 CI/CD 工具(Jenkins、GitLab CI)
需要更具体的实现方案吗?比如针对特定场景(如多仓库同步、增量同步等)的脚本。