美文网首页
git 裸仓库简单自动化部署

git 裸仓库简单自动化部署

作者: JJNile | 来源:发表于2019-06-11 23:31 被阅读0次

这里只做过程的记录,不过多解释,首先要明白裸仓库和本地仓库的区别,不明白得去先了解其概念,然后再继续往下。

服务端

创建一个 git 专属用户

创建 git 用户,并且给予裸仓库的权限

$ useradd git
$ passwd git
$ chown -R git:git project.git

编辑 /etc/passwd

$ vim /etc/passwd

禁止该 git 用户使用 shell 登录系统

git:x:1000:1000::/home/git:/usr/bin/git-shell

找到 git 用户并将 shell 改为/usr/bin/git-shell,git 用户可以正常使用 git 功能,但无法登录shell,为 git 用户指定的 git-shell 每次一登录就自动退出

创建 git 裸仓库

  1. 默认情况下

创建裸仓库

$ cd /home/git
$ git init --bare project.git
  1. 已经是 git 项目的情况下

将现有仓库导出为裸仓库

$ cd /var/www/project/
$ git init
$ cd /home/git/repositories/
$ git clone --bare /var/www/project/ project.git
$ cd /var/www/project/

// 在你的项目目录添加远程服务器
$ git remote add origin /home/git/repositories/project.git 
$ cd /var/www/project/

// 提交初始化代码
$ git add .
$ git commit -m "init"
$ git push origin master

这里 project 本身就一个 git 项目了,但现在要将这个项目转为裸仓库

添加 post-receive 钩子

进入 hooks 目录,创建并编辑 post-receive

$ cd project.git/hooks
$ touch post-receive && vim post-receive

将当前裸仓库和 project 这个项目挂钩

GIT_WORK_TREE=/var/www/project git checkout -f

保存后给 post-receive 加上运行权限

$ chmod +x post-receive

上述中基本完成了裸仓库的部署,最主要的两步:

  1. 创建裸仓库
  2. 设置钩子进行同步

完成重点后,其他的都是锦上添花。

客户端

克隆项目

$ git clone git@<ip>:/home/git/project.git

<ip>为「服务端」的 IP 地址,输入正确的密码后就能成功克隆

添加远程

$ git push -u origin master

测试 git 是否自动同步

打开两个终端 A 和 B,确保 A 和 B 在不同目录下,并且都进行了克隆

A 终端中进行修改并提交

$ echo 'hello' > index.html
$ git add .
$ git commit -m 'init'
$ git push

完成后以上步骤后 B 终端进行拉取

$ git pull

发现项目下存在 index.html 则代表自动同步部署成功

常见问题

推送后没同步

检查项目和 git 仓库目录权限,将其权限设为 git 用户

chown git:git /var/www/project/ -R
chown git:git /home/git -R

参考URL

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000
http://www.berlinix.com/it/autoweb.php

相关文章

网友评论

      本文标题:git 裸仓库简单自动化部署

      本文链接:https://www.haomeiwen.com/subject/mqjhfctx.html