git多人协作,web自动部署

搭建协作GIT服务器完成自动部署

需求

  • 多人协作开发不混乱
  • 自动部署

一条命令即可创建git裸仓库(中心仓库), 但是它不包含工作区且没有文件. 只能作用于远端的中心仓库存在

我们可以利用git的hook钩子功能, push触发脚本写出文件到web目录. 实现简单的自动部署

安装git

  • Linux/ubuntu/deepin/debain

    1
    2
    3
    4
    5
    6
    7
    8
    # 需要手动创建git用户
    $ sudo apt-get install git
    # 创建组
    $ groupadd git
    # 创建用户
    $ useradd git
    # 加入组 (前面组, 后面用户名)
    $ usermod -a -G group git git
  • Linux/CentOS

    1
    2
    # 会自动创建git用户组和用户
    $ sudo yum install git
  • Windows

    1
    去官网下载~

配置用户信息 (本地)

1
2
3
4
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com
# 生成公钥/密钥 (在用户目录/.ssh/下)
ssh-keygen -t rsa -C "haiyan.xu.vip@gmail.com"

id_rsa.pub 是你的公钥, 用文本编辑器打开copy给服务器管理员

授权访问 (服务器)

git一般是以ssh(22)端口访问, 你需要收集用户的公钥, 授权ssh连接

1
2
3
4
# 进入git用户的.ssh目录 (没有就创建)
$ cd /home/git/.ssh
# 允许登录的用户, 把它们的公钥粘贴进去保存. 一行一个
$ sudo vim authorized_keys

Tis:如果连接失败是因为你的linux发行版不包含ssh-server

需要手动安装一个ssh服务. 它的名字可能是sshd/openssh-server

ps -ef|grep sshd 看看ssh服务是否存在进程中

创建裸仓库

1
2
3
4
$ mkdir /home/dev
$ cd /home/dev/
$ git init --bare web.git # --bare 是创建裸仓库, 必须要
$ chown -R git:git /home/dev

注意 web.git权限必须是git用户的

接下来, 给裸仓库设置钩子脚本.

1
2
3
4
5
6
7
8
9
$ cd web.git/hooks
$ sudo vim post-receive
// 贴入以下代码 (/home/www 是文件输出目录)
#!/bin/bash
git --work-tree=/home/www checkout -f


$ chown git:git post-receive # git用户/组所有
$ chmod +x post-receive # 脚本文件需要执行权限

大功告成 :)

示例

1
2
3
4
5
6
7
8
9
10
11
# 克隆仓库
$ git clone git@192.168.1.107:/home/dev/web.git test

# 第一种方法不一定好使, 我今天就遇到了. 可以用下面这种
$ mkdir test
$ cd test/
$ git init
# 添加远程地址
$ git remote add origin git@192.168.1.107:/home/dev/web.git
# 第一次拉取一下
$ git pull origin master