git利用post-receive自动化部署

我自己的项目结构是这样的,每一个仓库对应一个项目,例如public/wx项目对应repo/wx.git

  1. ├── public
  2. | └── wx // 这是我们的web代码部署目录
  3. | |── index.php
  4. ├── test2.ph
  5. ├── test3.php
  6. └── test.php
  7. └── repo // 这个是我们的仓库目录
  8. └── wx.git // 这个对应wx项目的仓库
  9. ├── branches
  10. ├── config
  11. ├── description
  12. ├── HEAD
  13. ├── hooks // post-receive钩子代码写在这里面
  14. ├── index
  15. ├── info
  16. ├── objects
  17. └── refs

再看下hooks文件目录

  1. ├── applypatch-msg.sample
  2. ├── commit-msg.sample
  3. ├── post-commit.sample
  4. ├── post-receive
  5. ├── post-receive.sample
  6. ├── post-update.sample
  7. ├── pre-applypatch.sample
  8. ├── pre-commit.sample
  9. ├── prepare-commit-msg.sample
  10. ├── pre-rebase.sample
  11. └── update.sample

我们将post-receive.sample复制一份post-receive,并且编写代码如下

  1. # 指定我的代码检出目录DIR=/www/public/wxgit --work-tree=${DIR} clean -fd
  2. # 直接强制检出git --work-tree=${DIR} checkout --force
  3. example
  4. # WORK_TREE='/www/wwwroot/lumen.kevinfei.com/'
  5. # git --work-tree="${WORK_TREE}" reset --hard

如何生成目录

上面看到的repo目录中的wx.git实际上是一个裸仓库,我们用下面的命令来生成这样一个仓库。

  1. cd /www/repo
  2. git init --bare wx.git

对于代码部署目录和仓库我们已经通过post-receive进行了关联了,因为我们一旦将代码push到仓库,那么会自动检出到publish/wx目录下。
远程部署

在本地电脑上,我们添加远程仓库

  1. git init
  2. git remote add origin git@xxx.xxx.xxx.xxx:/www/repo/wx.git

这个时候我们添加了远程仓库,那么我们来测试下push操作

  1. touch index.php
  2. git add .
  3. git commit -m 'test'
  4. git push origin master

可能会提示一个—set-upstream,直接执行下就好了。执行完之后我们登陆服务器,会发现文件已经出现在public/wx/index.php

注意点

如果我们没有配置ssh免密码登陆的话,我们需要在push代码的时候输入密码
如果我们添加的远程仓库不是root@xxx.xxx.xx.xx,例如是git@xx.xx.xx.xx,那么我们要确保 git用户对wx.git目录
下的文件有777权限。

新增仓库

需要登陆远程服务器进行初始化repo_name.git仓库
需要手动创建public/repo_name文件夹,并且修改权限为777
需要重新编写hooks/post-recieve文件,修改里面的DIR路径为public/repo_name


点赞 ( 1 )

0 条评论

发表评论

人生在世,错别字在所难免,无需纠正。

插入图片
s
返回顶部