Git插件的auto_fetch仅定期执行git fetch且不合并、不更新工作区;真要自动拉取需用post-checkout钩子(切分支时拉)、cron定时拉(适合只读环境),禁用post-merge避免循环错误。

Git插件本身不支持自动拉取,别白配auto_fetch
Sublime Text 的 Git 插件虽有 auto_fetch 配置项(默认为 false),但它**只是定期执行 git fetch,且不触发合并、不更新工作区、也不通知你**——换句话说,它既不会自动 git pull,也不会解决冲突或刷新文件状态。开启它基本等于“后台悄悄看一眼远程有没有新提交”,对日常开发几乎无感。
所以如果你期待的是“切分支/保存文件/打开项目时自动同步最新代码”,这个配置起不到作用。真要自动拉取,必须绕过插件,用 Git 自身机制。
用 post-checkout 钩子实现「切到某分支就自动拉」
这是最轻量、最可控的方案,适合主开发分支(如 main 或 dev)需要频繁保持最新但又不想污染其他分支的场景。
- 进入项目根目录,执行
cd .git/hooks - 创建
post-checkout文件:touch post-checkout - 写入以下内容(注意替换
main为你目标分支名):#!/bin/bash current_branch=$(git symbolic-ref --short HEAD 2>/dev/null) if [ "$current_branch" = "main" ]; then git pull origin main --ff-only fi
- 赋予执行权限:
chmod +x post-checkout
--ff-only 很关键:它拒绝非快进合并,避免意外覆盖本地未提交修改。如果提示 “non-fast-forward”,说明你本地有未推送或未合并的提交——这反而是保护机制在起作用。
用 cron 定期拉取:简单但有风险
适用于无人值守的测试机、文档仓库或纯读取型项目,不适合正在编辑中的开发环境。
- 运行
crontab -e,添加一行(每5分钟检查一次):*/5 * * * * cd /path/to/your/repo && git pull origin main --ff-only > /dev/null 2>&1
- 确保该用户已配置好 SSH 密钥(不用输密码),且
git命令在 cron 环境中可用(可加PATH=/usr/bin:/bin前缀) - ⚠️ 切记:若当前有未提交更改,
git pull会失败;若用了--no-ff或没加--ff-only,可能产生合并提交甚至冲突,导致后续自动化中断
别碰 post-merge:它根本不会自动触发
网上很多教程教你在 .git/hooks/post-merge 里写 git pull,这是典型误解。post-merge 只在本地执行了 git merge(比如 git pull 后半段)后触发,而 git pull 本身已经完成拉取和合并——再让它拉一次,纯属循环套娃,还容易因重复操作出错。
真正该用的钩子是 post-checkout(切换分支时)、post-rewrite(重写历史后,如 rebase)或外部调度(cron)。把逻辑塞进错误钩子里,只会让问题更难排查。
自动拉取不是开关一开就完事,它本质是在「便利性」和「安全性」之间做权衡。每次 git pull 都可能带来冲突、覆盖、或意料外的变更,所以所有可行方案都得带防护条件——要么限定分支,要么加 --ff-only,要么避开编辑高峰期。漏掉这一层,默认就是给自己埋雷。

















