首页 > 解决方案 > 使用 git 挂钩的服务器部署不起作用

问题描述

在本地机器和 ubuntu vps 服务器中使用 windows 10 时,我正在尝试使用 git hooks 从本地到服务器进行自动部署。我将我的 ubuntu 服务器配置如下:

root@server:~# cd /var
root@server:~# mkdir repo && cd repo
root@server:~# mkdir site.git && cd site.git
root@server:~# git init --bare
root@server:~# cd hooks
root@server:~# touch post-receive && nano post-receive 

并修改post-receive如下

#!/bin/sh
git --work-tree=/var/www/site--git-dir=/var/repo/site.git checkout -f

之后在本地 pc repo 中我执行了以下命令

git remote add production ssh://root@example.com/var/repo/site.git

现在在本地仓库中,我有 3 个分支,例如master, branch1, branch2. 当我将 repo 推送到服务器时, git push production master它将主分支推送到服务器。但是当我 push 时git push production branch1,它不会推动 branch1。在/var/www/site我找到了主分支。

所以我有两个问题:

  1. 如何将其他分支(不是主分支)推送到服务器。
  2. 如果我需要从本地机器上删除生产分支并添加新的服务器目标怎么做?

提前致谢!

标签: gitubuntuservervps

解决方案


您可以尝试以下方法:

#!/bin/bash
TARGET="/var/www/site"
GIT_DIR="/var/repo/site.git"

while read oldrev newrev ref
do
        echo "Ref $ref received. Deploying ${newrev} to production..."
        git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $newrev
done

如果没有在 checkout 命令上指定分支或提交,将再次检出现有的 head。


推荐阅读