当前位置: 首页 > Linux

Git使用post-receive自动部署

时间:2023-04-06 21:43:42 Linux

需要实现gitpush,直接完成代码部署到服务器目录。实现方式使用githooks中的post-receive实现代码提交完成后的动作。为仓库指定一个--work-tree然后执行checkout操作checkout--force目录结构我自己的项目结构是这样的,每个仓库对应一个项目,比如public/wx项目对应repo/wx.gitwarehouse.├──public│└──wx//这是我们的网页代码部署目录│├──index.php│├──test2.php│├──test3.php│└──test.php└──repo//这是我们的仓库目录└──wx.git//这个对应wx项目的仓库├──branches├──config├──description├──HEAD├──hooks//post-receivehookcodewritingHere├──index├──info├──objects└──refs查看hooks文件目录。├──applypatch-msg.sample├──commit-msg.sample├──post-commit.sample├──post-receive├──post-receive.sample├──post-update.sample├──pre-applypatch.sample├──pre-commit.sample├──prepare-commit-msg.sample├───pre-rebase.sample└──update.sample我们将post-receive.sample复制到post-receive,并且写代码如下#指定我的代码检出目录DIR=/www/public/wxgit--work-tree=${DIR}clean-fd#直接强制检出git--work-tree=${DIR}checkout--force如何生成目录上面看到的repo目录下的wx.git其实就是一个裸仓库,我们使用下面的命令来生成这样一个仓库。cd/www/repogitinit--barewx.git我们通过post-receive把代码部署目录和仓库关联起来了,因为一旦我们push代码到仓库,就会自动检出到publish/wx目录下。远程部署在本地电脑上,我们添加远程仓库gitinitgitremoteaddoriginroot@xxx.xxx.xxx.xxx:/www/repo/wx.git此时我们添加了远程仓库,接下来我们来测试一下推送操作touchindex.phpgitadd.gitcommit-m'test'gitpush可能会提示一个--set-upstream,直接执行即可。执行完之后,我们登录服务器,会发现public/wx/index.php里面出现了这个文件,注意如果我们没有配置ssh免密码登录,在push的时候需要输入密码code如果我们添加的远程仓库不是root@xxx.xxx.xx.xx,比如abc@xx.xx.xx.xx,那么我们需要保证abc用户对wx中的文件有777权限.git目录。新建仓库需要登录远程服务器初始化repo_name.git仓库需要手动创建public/repo_name文件夹,并修改权限为777,需要重写hooks/post-recieve文件,修改DIRpublic/repo_name内部的路径