美文网首页
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