博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
搭建Git服务器并感受hook使用
阅读量:6157 次
发布时间:2019-06-21

本文共 1918 字,大约阅读时间需要 6 分钟。

通常情况下我们都是将项目托管到Github,Coding等服务商。如果你有一台自己的Linux云主机,在上面搭建Git服务器比想象中要简单的多。这篇文章讲解如何搭建Git服务器及使用git的hook机制(使用post-receive这个hook,在git服务器受到push请求,并且接受完代码提交时触发)

大致要执行下面的命令

# 创建一个名为git的用户,专门访问仓库,这里会问一系列问题,包括设置用户密码,请牢记sudo adduser git# 配置SSH,无密码访问服务器,这里不是本文重点,关于SSH配置请自行搜索,要创建 home/git/.ssh 目录,并设置权限sudo chmod 700 /home/git/.ssh  chmod 600 authorized_keys# 创建项目目录,这里没有放到用户目录下mkdir -p /usr/git_repo/gittest.git && cd ..  # 建立一个裸仓库并设置该仓库目录的组权限为可写。# 裸仓库就是一个只包含.git子目录的内容,不包含其他资料。git init --bare --shared# 好,服务端的仓库已经创建,下面是本地操作# 开发人员小马先在本地创建一个git项目,将刚才创建的仓库设置为项目的远程仓库并推送分支。git inittouch readme && vi readmegit add .git commit -m 'add readme'git remote add origin git@cloud:/usr/git_repo/gittest.gitgit push origin master# 小张作为另外一个开发人员,可以直接clone项目,并推送自己的改动# 本地尝试访问并拉仓库。cloud是我配置ssh主机名称,也可以是IP地址或域名# 如果不成功检查SSH的配置git clone git@cloud:/usr/git_repo/gittest.gitcd gittestvi readmegit commit -am 'fix the readme file'git push origin master

是不是和Github的 git clone git@github.com:mafeifan/smzdm.git 很类似?但是Github还支持HTTP协议,比如 https://github.com/mafeifan/smzdm.git 想达到同样的目的,需要在服务器上针对apache或nginx配置 。

使用服务器的hook

每当本地push代码,还得在服务器上git pull。这样太麻烦了。git支持hook机制,类似事件通知,比如git服务器收到push请求,并且接受完代码提交时触发。需要在hooks目录下创建post-receive文件

服务器操作

cd /usr/git_repo/gittest.git/hookssudo cp post-update.sample  post-receive# 编辑post-receive内容为echo $(date) >> hook.log

这样push代码到服务器,就会多出一个记录时间的hook.log

你可以优化内容,比如执行代码检查,git pull代码到/var/www,npm install,等操作。

使用托管网站的web-hook

以bitbucket为例,我在上面创建一个nodejs项目叫git-deploy-demo,暴露一个接口叫deploy,必须是post方法。项目跑在我自己的主机叫cloud。每次push代码,我让他调用这个deploy接口

img_be303e408b8af75e8902118780a494f6.png
image.png

关于deploy接口,接收调用后执行update.sh脚本

const exec = require('child_process').exec;app.post('/deploy', (req, res) => {  const commands = 'sh ./update.sh';  exec(commands, (err, out, code) => {    if (res.statusCode === 200) {        res.send('deploy done');    }else {        res.send(out)    }  })

update.sh内容如下:

#!/bin/bashgit pullnpm installsudo pm2 restart git-deploy-demo

参考:

  • 需FQ

转载地址:http://sebfa.baihongyu.com/

你可能感兴趣的文章
发布一个TCP 吞吐性能测试小工具
查看>>
java学习:jdbc连接示例
查看>>
PHP执行批量mysql语句
查看>>
Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块
查看>>
Silverlight 如何手动打包xap
查看>>
建筑电气暖通给排水协作流程
查看>>
JavaScript面向对象编程深入分析(2)
查看>>
linux 编码转换
查看>>
POJ-2287 Tian Ji -- The Horse Racing 贪心规则在动态规划中的应用 Or 纯贪心
查看>>
Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月7日-1月14日)
查看>>
关于C#导出 文本文件
查看>>
使用native 查询时,对特殊字符的处理。
查看>>
maclean liu的oracle学习经历--长篇连载
查看>>
ECSHOP调用指定分类的文章列表
查看>>
分享:动态库的链接和链接选项-L,-rpath-link,-rpath
查看>>
Javascript一些小细节
查看>>
禁用ViewState
查看>>
Android图片压缩(质量压缩和尺寸压缩)
查看>>
nilfs (a continuent snapshot file system) used with PostgreSQL
查看>>
【SICP练习】150 练习4.6
查看>>