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

配置Git钩子实现远程Ubuntu服务器自动Git Pull

实现本地Git推送后远程Ubuntu服务器自动拉取代码

我来帮你搞定这个自动拉取的问题!之前用post-receive钩子没成功,大概率是配置细节没做好——比如仓库类型不对、钩子没加执行权限,或者脚本路径写错了。下面一步步来:

1. 在远程服务器创建裸仓库(关键!)

非裸仓库直接接收推送容易出问题,而且钩子的执行逻辑也会受影响,所以先建一个专门用来接收推送的裸仓库:

  • SSH登录到你的Ubuntu服务器:ssh your-username@your-server-ip
  • 创建裸仓库目录(路径自己选,比如/opt/my-project.git):
    mkdir -p /opt/my-project.git
    cd /opt/my-project.git
    git init --bare
    

2. 配置post-receive钩子

裸仓库的hooks目录里默认有示例文件,我们需要创建可执行的post-receive脚本:

  • 进入钩子目录:cd /opt/my-project.git/hooks
  • 创建post-receive文件并编辑:
    nano post-receive
    
    写入以下内容(替换成你的实际路径):
    #!/bin/bash
    # 你的生产代码存放目录(绝对路径)
    TARGET_DIR="/path/to/your/production/folder"
    # 强制拉取最新代码到生产目录
    git --work-tree=$TARGET_DIR --git-dir=/opt/my-project.git checkout -f main
    

    注意:把main换成你实际使用的分支名(比如master)

3. 给钩子脚本添加执行权限

这是很多人忽略的一步!没有执行权限的话,Git不会触发这个钩子:

chmod +x post-receive

4. 本地仓库关联远程裸仓库

回到你的本地电脑,把刚才创建的裸仓库设为远程仓库:

git remote add production ssh://your-username@your-server-ip/opt/my-project.git

之后推送代码时,直接推到这个远程仓库:

git push production main

常见问题排查

如果还是没生效,检查这几点:

  • 权限问题:确保你的服务器用户对TARGET_DIR有读写权限,比如可以手动在服务器上touch /path/to/your/production/folder/test.txt测试
  • 路径错误:脚本里的所有路径必须是绝对路径,别用相对路径(比如../production这种)
  • 脚本语法错误:手动执行脚本看看有没有报错:cd /opt/my-project.git/hooks && ./post-receive,根据错误提示修正
  • 分支匹配:脚本里的分支名要和你推送的分支一致,比如你推的是dev,脚本里也要改成checkout -f dev

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:11:15