欢迎您, 来到 宁时修博客.^_^

centos7环境安装git服务并且实现代码同步

2017/06/02 宁时修 Linux,Nginx,Git 969
git服务安装和使用并且实现代码同步,抛开传统项目打包一系列的繁琐操作。

既然你能想到用Git来同步代码,想必你对它也不会陌生。那么我们就直接进入主题,一起来看看Git在Centos 7环境下是怎么操作进行本地代码同步到服务器。

1.安装git 

[root@Cocolait ]# yum install -y git


2.查看git 版本

[root@Cocolait ]# git --version


3.创建 git 用户,用来管理 Git 服务,并为 git 用户设置密码

[root@Cocolait ]# id git #查看用户
[root@Cocolait ]# useradd git
[root@Cocolait ]# passwd git
"password:输入你的密码"


4.创建一个git空厂库,用于客户端clone

[root@Cocolait]# mkdir -p /home/data/git/testgit.git #创建git仓库
[root@Cocolait]# cd /home/data/git                               进入目录
[root@Cocolait git]# git init --bare  testgit.git #初始化git仓库

#当运行完上面的最后一句命令时,会有提示:
#Initialized empty Git repository in /home/data/git/testgit.git
#看到这个提示时,说明你的git厂库已经被成功创建
#成功创建好厂库之后,还需要把厂库目录权限给分配下
[root@Cocolait git]# chown -R git:git testgit #把git仓库的权限交给git用户


5.客户端克隆git远程仓库

> git clone git@127.0.0.1:/home/data/git/testgit.git
#我这里用本地IP代替了,服务器IP你懂的,你需要修改成你自己服务器的IP


6.git仓库代码同步到php web目录中,用git hooks钩子就能实现!

[root@Cocolait ]# cd  /home/data/git/testgit.git #进入git空仓库
[root@Cocolait testgit.git]# cd   hooks  #进入hooks目录
[root@Cocolait hooks]# vim post-receive   #创建post-receive并且写入内容
#//在该文件里输入以下内容 注意:--work-tree 写上你的服务器web目录
#!/bin/bash
git --work-tree='你的服务器web目录' checkout -f
比如:git --work-tree=/www/web checkout -f
//wq!保存退出后,将该文件用户及用户组都设置成git
[root@Cocolait hooks]# chown git:git post-receive #文件用户及用户组都设置成git
#//由于该文件其实就是一个shell文件,我们还应该为其设置可执行权限
[root@Cocolait hooks]# chmod +x post-receive

特别注意:在同步代码之前首先确认服务端web目录下是否创建了在git hooks中设置的同步目录,如果没有创建该目录那么同步会失败,因为git不会自动帮你创建同步目录,所以需要人为手动创建!

注意:重新上传新的文件推送到git远程仓库,如果没有同步到指定的web中,那么就是git用户没有写入文件的权限!


7.将Git用户加入到nginx用户组中

[root@Cocolait ]# usermod git -a -G nginx


8.并将web目录设置为775权限,给775用户组下面的用户才能有写入的权限

[root@Cocolait ]# find /app/web -type d|xargs chmod 775

注意:本地同步代码同步服务器Web目录,是由Git用户(用户组)操作完成的,这也导致在执行php项目时Nginx用户(用户组)没有操作权限,所以还需要写一个Shell脚本配合Crontab服务来定时修改Web代码目录的权限,也还需要把Git用户添加到Nginx用户组中。

1.) Git用户添加Nginx用户组

[root@Cocolait ]# usermod -a -G nginx git

2.) 创建Shell脚本,并且书写下面内容

[root@Cocolait ]# mkdir -p /shdir
[root@Cocolait ]# vi /shdir/web.sh
#!/usr/bin/sh
chown -R nginx.nginx /www/web
find /www/web -type d|xargs chmod 775

复制内容并且修改web项目执行即可

注意:/www/web 是你的web项目执行路径

3.) Crontab 执行Shell脚本

[root@Cocolait ]# crontab -e
*/1 * * * * /usr/bin/sh /shdir/web.sh &>/dev/null

复制保存退出即可!


9.Git 客户端使用前的配置

1.配置邮箱和用户名

>git config --global user.email = '你的邮箱';
>git config --global user.name = '你的名字或昵称';
----------------------------------------------------------------
如果配置项已经存在邮箱相关的配置值,想取消咋整,执行下面命令即可
>git config --global user.email '你的邮箱' -add
-----------------------------------------------------------------


2.http(s)方式如何自动记住密码

设置长期记住密码:

>git config --global credential.helper store


10.列举一些平时常用的Git操作命令

1.git克隆某个项目

>git clone https://git.oschina.net/cp.net/tk_blog.git

2.git克隆某个分支并且重命名

>git clone -b v1.0 https://git.oschina.net/cp.net/tk_blog.git blog

3.更新

>git pull #不写分支默认更新

4.推送我习惯用工具推送,用的工具提供的GIT GUI


11.git提交composer的目录时出现git submodule子模块的情况

出现这种一般都是目录本来就不属于git的子模块,
可能是你之前的提交操作把这个目录提交上去了,
导致会成为git的子模块出现。

"解决方式:重新获取整个项目,手动删除这个git submodule子模块,在提交!"

git系列教程可参考码云教程文档:http://git.mydoc.io/

点赞
说说你的看法

所有评论: (1)

# 加入组织

1、用手机QQ扫左侧二维码

2、搜Q群:1058582137

3、点击 宁时修博客交流群