我的开发机器上有一个本地git存储库。
我想使用git将代码推送到我的生产服务器。一旦代码被推到那里,就会触发重启Web服务器。
执行此操作的命令是什么?我正在使用debian。
/var/www/example.com
是我的本地存储库
生产主机名是production.example.com
我已经设置了ssh +键。
答案 0 :(得分:4)
将代码直接推送到实时网站通常不是一个好主意。为此,您可以在公共目录之外的服务器上创建一个裸存储库。此存储库将更改到您的Live网站存储库,并将像您的网站的守门员。要进行设置,请在实时网站目录周围创建一个存储库:
$ cd ~/www
$ git init
$ git add .
$ git commit -m"initial import of pre-existing web files"
创建此文件后,移至无法通过HTTP访问的目录。为了简单起见,我们可以调用这个裸目录HUB和网站目录LIVE。在这里初始化一个裸存储库:
$ cd; mkdir site_hub.git; cd site_hub.git
$ git --bare init
然后,从您的实时网站工作目录中,将此裸存储库添加为远程并推送实时网站的主分支。
$ cd ~/www
$ git remote add hub ~/site_hub.git
$ git remote show hub
* remote hub
URL: /home/rizwan/site_hub.git
$ git push hub master
您需要挂钩来提交对活动存储库的更改。在HUB存储库中创建一个post-update
挂钩:
#!/bin/sh
echo
echo "**** Pulling changes into Live [Hub's post-update hook]"
echo
cd $HOME/www || exit
unset GIT_DIR
git pull hub master
exec git-update-server-info
在此挂钩中,您可以使用代码在完成提取后重新启动服务器。
另外,在LIVE repo上创建一个post-commit
挂钩,将对实时网站所做的更改发送回HUB。
#!/bin/sh
echo
echo "**** pushing changes to Hub [Live's post-commit hook]"
echo
git push hub
在本地计算机上,将HUB存储库添加为远程数据库并将更改添加到其中:
git remote add hub <hub-repository-url>
这是如何工作的,您编写了一些代码并将其推送到裸存储库,该存储库使用其更新后挂钩将更改推送到实时存储库并重新启动服务器。
答案 1 :(得分:2)
我建议您在服务器上的裸回购中使用post-receive hook,其中包含:
GIT_DIR=/path/to/bare/repo/.git
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
通过推送到一个裸仓库,您将不会遇到任何与您正在推送的工作树不同步的问题(因为裸仓库有没有工作树)。
然后,您将直接在实时站点目录结构上检查您的裸仓库(通过post-receive挂钩)。
这类似于“git GIT_WORK_TREE post-receive hook deployment remote”
设置GIT_DIR
可以避免“Git checkout in post-receive hook: “Not a git repository '.'
””中提到的问题。