You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Git Hook实现推送后触发其他机器仓库自动拉取?是否需第三方工具?

Git Hook实现推送后自动拉取的方案

嘿,刚好之前折腾过类似的需求,给你详细拆解一下:

首先回答你的第二个问题:完全不需要第三方软件,Git自带的Hook机制加上简单的Shell脚本就能搞定,不过要分「同一机器的仓库」和「跨机器的仓库」两种场景来处理,下面分别说明:

场景一:同一机器下,推送后自动拉取另一个本地仓库

这种情况最直接,用Git的post-push本地Hook就行——这个Hook会在你执行git push成功完成后自动触发。

操作步骤:

  • 打开你日常用来推送的本地仓库,进入.git/hooks目录(这个目录默认有一堆.sample后缀的示例文件,不用管它们)
  • 创建一个名为post-push的文件(注意不要加任何后缀),然后把下面的脚本粘贴进去,记得把/path/to/your/target/repo替换成你要自动拉取的那个仓库的绝对路径:
#!/bin/bash

# 切换到目标仓库目录,切换失败就退出脚本
cd /path/to/your/target/repo || exit
# 拉取远程分支的最新代码,把main换成你的实际分支名(比如master)
git pull origin main
  • 给这个脚本添加执行权限,否则Git不会执行它:
chmod +x .git/hooks/post-push

这样以后你在这个仓库执行git push成功后,脚本就会自动帮你拉取目标仓库的最新代码了。

场景二:跨机器,推送后远程机器的仓库自动拉取

这种情况需要用到远程仓库的服务器端Hook,因为本地的Hook没法直接操作远程机器。我们用post-receive Hook——这个Hook会在远程仓库接收到推送请求并处理完成后触发。

前提准备:

  • 你需要能通过SSH无密码登录到远程机器(不然拉取时需要手动输密码,自动流程就卡住了)。可以生成SSH密钥对,把本地的公钥添加到远程机器的~/.ssh/authorized_keys文件里来实现无密码登录。
  • 确保远程机器上的目标仓库是干净的(没有未提交的修改),否则自动拉取可能会失败。如果是用裸仓库来接收推送,那还需要在脚本里指定工作目录。

操作步骤:

  • 登录到远程机器,找到用来接收推送的仓库(可以是裸仓库,也可以直接是目标仓库),进入它的.git/hooks目录
  • 创建一个名为post-receive的文件(同样不要加后缀),粘贴下面的脚本,替换路径和分支名:
#!/bin/bash

# 切换到远程机器上的目标仓库目录
cd /path/to/remote/target/repo || exit
# 拉取最新代码
git pull origin main

# 如果你的远程接收仓库是裸仓库,需要用下面的命令来更新工作区:
# git --work-tree=/path/to/remote/target/repo checkout -f main
  • 给脚本添加执行权限:
chmod +x .git/hooks/post-receive

现在当你从本地推送到这个远程仓库时,post-receive Hook就会自动在远程机器上拉取最新代码到目标仓库了。

另一种跨机器方案:本地Hook远程执行命令

如果你不想修改远程仓库的Hook配置,也可以在本地的post-push Hook里通过SSH直接远程执行拉取命令,脚本如下:

#!/bin/bash

# 替换成你的远程机器用户名、IP和目标仓库路径
ssh your-user@remote-ip "cd /path/to/remote/target/repo && git pull origin main"

这种方式同样需要SSH无密码登录,好处是不用碰远程仓库的配置,适合临时需求或者没有远程仓库管理权限的情况。

注意事项:

  • 脚本里的路径一定要用绝对路径,因为Hook执行时的工作目录可能不是你预期的,用相对路径容易出错。
  • 如果遇到权限问题,检查一下执行Git的用户对目标仓库有没有读写权限。
  • 自动拉取场景下,尽量保证目标仓库没有未提交的修改,否则可能会导致拉取冲突,需要手动处理。

内容的提问来源于stack exchange,提问作者Davis8988

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:32:56