Git本身无定时功能,需依赖系统调度:Linux用cron每30分钟执行git pull --ff-only origin main,Windows用任务计划程序运行bat脚本,关键要绝对路径、免密认证、非交互及避免冲突。

git pull 不能直接定时,得靠系统级调度
Git 本身没有内置的定时拉取功能,git pull 是个手动命令,不会自己跑。想让它“定时同步”,本质是让操作系统(Linux/macOS 用 cron,Windows 用任务计划程序)定期执行一次拉取脚本。关键不是 Git 多厉害,而是你能不能让 shell 或 cmd 稳定、干净地跑起来。
常见错误现象:cron 下执行失败、提示 “not a git repository” 或 “Permission denied (publickey)”——基本都是环境变量缺失或 SSH key 不可用导致的。
- Linux/macOS:确保脚本中用绝对路径调用
git(如/usr/bin/git),并显式cd /path/to/your/repo - SSH 认证必须免密:用
ssh-add -l检查 key 是否已载入,cron不继承你的 shell session,所以得用ssh-agent启动或改用 deploy key - 避免交互:所有操作必须非交互,禁用
git pull --rebase带冲突时卡住;加--ff-only更安全,冲突时直接失败不合并
crontab 示例:每 30 分钟拉一次 main 分支
编辑定时任务:crontab -e,加这一行:
*/30 * * * * cd /home/user/myproject && /usr/bin/git pull --ff-only origin main > /dev/null 2>&1
说明:*/30 * * * * 表示每半小时触发;> /dev/null 2>&1 把输出全丢掉,否则 cron 会发邮件(如果配置了 mail 服务);--ff-only 是重点——它拒绝 fast-forward 以外的合并,避免自动产生 merge commit 或冲突暂停。
容易踩的坑:git pull 默认行为是 fetch + merge,如果本地有未提交修改,pull 会失败;建议搭配 git stash pop 自动处理,但 stash 冲突更难诊断,不推荐无监控场景下启用。
监控一个或多个 GitCode 仓库的 PR,通过 OpenClaw Gateway 自动执行 AI 审查,发布 PR 评论,并发送钉钉和企业微信通知。
Windows 任务计划程序怎么配
不用 PowerShell 脚本封装就容易出错。新建一个 sync.bat:
@echo off cd /d "C:\Users\me\myproject" "C:\Program Files\Git\bin\git.exe" pull --ff-only origin main
然后在“任务计划程序”里新建基本任务,触发器设为“每天、重复任务间隔 1 小时”,操作选“启动程序”,程序填 cmd.exe,参数填 /c C:\path\to\sync.bat。
关键点:cd /d 必须带 /d 才能跨盘符切换;Git 路径要用完整安装路径,不能只写 git(任务计划默认 PATH 不含 Git);如果远程用 HTTPS,凭据要提前存好(git config --global credential.helper store),否则卡在密码输入。
为什么不用 git fetch + reset --hard?
有人想绕过 pull 直接 git fetch && git reset --hard origin/main 强制覆盖本地,这确实能“同步”,但风险极高:
- 会丢弃本地所有未 push 的提交,且不可逆(
reflog可能还在,但脚本里不加日志就等于没留痕) - 如果本地有 untracked 文件被远程同名文件覆盖,Git 不报错也不提醒
-
reset --hard在 CI 或共享工作目录中极易引发协作事故
真正需要“强制对齐”的场景(比如构建机),应该用 git clone --depth=1 -b main <url> 完全重建,而不是在旧仓库上硬 reset。定时同步的本质是“轻量更新”,不是“重装系统”。

















