CentOS 7 搭建 Git 实现代码自动同步/自动部署

基本步骤

  1. 安装 GIT
  2. 建立系统 GIT 的组和用户
  3. 建立 GIT 仓库与设置同步
  4. clone 服务器仓库至服务器目录
  5. 克隆服务器的 GIT 仓库到本地
  6. 同步本地代码自服务器

环境及说明

  1. CentOS 7 64x

1、 安装GIT

1.1 安装 Git 依赖

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel

1.2 安装 Git

yum install -y git

安装完成后,可经过 git --version 验证 git 安装是否成功php

git --version
git version 1.8.3.1

2、建立系统 GIT 的组和用户

为 Git 建立单独的系统用户组和用户,提升系统的安全性。git

2.1 建立系统 Git 用户组

# user-gourp 替换为您想建立的用户组,通常 git 便可
groupadd user-group

2.2 建立系统 Git 组下的 Git 连接用户

# username 替换为您的 Git 用户名
# user-gourp 替换为您建立 Git 用户组
adduser username -g user-gourp

2.3 给 Git 用户设置密码

# username 替换为您的 Git 用户名
passwd username 
Changing password for user username.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

若是是正式服务器,为避免被攻击,密码强度请设置的强一点web

3、建立 GIT 仓库与设置同步

3.1 建立 GIT 仓库

仓库能够建立在任意位置,若是系统盘紧张,能够建立在挂接盘或其余目录apache

本文以建立在 home 目录下为例安全

# 切换至 home 目录
cd /home
# 建立 git_repository 目录
mkdir git_repository
# 切换至 git_repository 目录
cd git_repository
# 建立一个裸的 git 仓库 --bare 是表明建立裸仓库,这个参数必定记得带上
git init --bare demo.git
# 把 demo.git 目录赋权给您建立的 Git 用户
# username 替换为您建立 Git 用户名
# user-gourp 替换为您建立 Git 用户组
chown -R username:user-group demo.git
# 文件只有文件全部者或同在一个用户组下的用户可读,可写,可执行,其余用户只有读权限
chmod 774 -R demo.git

3.2 设置 GIT 目录同步

原理是建立收到提交请求时执行的脚本,这样当你在本地仓库执行git push后就会触发 post-receive 这个脚本。bash

3.2.1 建立 post-receive 脚本文件

# your-git-repository-path 替换为您 git_repository 路径
cd /your-git-repository-path/demo.git

# 切换目录至 hooks
cd hooks

# 建立 post-receive
vi post-receive

3.2.2 修改 post-receive 脚本文件

#!/bin/sh
unset GIT_DIR
# 您项目的工做目录
ProjectPath="/var/www/demo"

# 定义日志目录
LogPath="/your-git-repository-path/project.git/hooks"  

# 输出日期到日志
echo -e "\n=================  `date +"%Y-%m-%d %H:%M:%S"`  ===============\n" >> $LogPath/auto-sync.log 2>&1

# 自动同步方法

# 1. 直接拉取并合并
git pull origin master  >> $LogPath/auto-sync.log 2>&1 

# 2. 拉取最新版本至本地,不自动合并
# git fetch --all
# git reset --hard origin/master

echo "====================================================== "  >> $LogPath/auto-sync.log 2>&1

这里有2个问题未解决服务器

  1. 定义日志目录,若是定义 hooks 外层,则没法写入。赋权整了一整也没弄出来ssh

  2. 根据 服务器自动部署项目之GitHooks神器 所说,用 git fetch 而非 git pull 实现。 区别在于:curl

    1. git fetch:至关因而从远程获取最新版本到本地,不会自动merge。
    2. git pull:至关因而从远程获取最新版本并merge到本地。
    3. pull实现至关于fetch后再用merge,来合并本地和远端的代码。

    这里就有个问题,若是开发者在提交过程出现失误,使用git reset复位后,如今远端的代码版本低于web端的代码版本,再使用pull的时候就不能实现和开发者本地的代码的同步。因此这里使用fetch后,在强制使用reset实现web端的代码版本指针和git服务端的一致。(若是在本机可使用stash,而后pull,而后drop刚才stash的内容)工具

    他这段话意思是明白了,可是没明白具体操做,望高手指点。

3.2.3 post-receive 脚本文件赋权

# username 替换为您建立 Git 用户名
# user-gourp 替换为您建立 Git 用户组
chown username:user-group post-receive
chmod -R 774 post-receive

4、clone 服务器仓库至服务器目录

本文自动代码同步的语言为 php,其余语言类同,请本身切换服务器目录

# 切换至 apache 项目目录
cd /var/www

# your-git-repository-path 替换为您 git_repository 路径
# project-name 切换为clone 后您须要的项目名称
git clone /your-git-repository-path/demo.git project-name

# 赋权
# username 替换为您建立 Git 用户名
# user-gourp 替换为您建立 Git 用户组
# project-name 替换为clone 后的项目名称
# 赋权775 其余用户可读可执行,不然项目可能启动不了
chown -R username:user-group project-name
chmod -R 775 project-name

5、克隆服务器的 GIT 仓库到本地

各操做系统工具不一致,能够用工具,命令行同步到本地.

连接地址:

# username 替换为您建立 Git 用户名
# your-git-repository-path 替换为您 git_repository 路径
# server 能够是 IP,也能够是域名
# port 当您修改了端口时须要,未设置为空便可
ssh://username@server:port/your-git-repository-paht/demo.git

示例:

ssh://test@192.168.0.111/home/git_respository/demo.git

6、同步本地代码自服务器

可用工具,也可命令提交代码自服务器,这里就很少说了

错误日志可查看 auto-sync.log

# your-git-repository-path 替换为您 git_repository 路径
cat /your-git-repository-paht/demo.git/hooks/auto-sync.log

广告栏: 欢迎关注个人 我的博客

相关文章
相关标签/搜索