美文网首页Git使用程序员Git
centos 编译安装git-2.9.3

centos 编译安装git-2.9.3

作者: 无极生两仪 | 来源:发表于2017-04-28 17:21 被阅读0次

一、git-2.9.3下载:

https://www.kernel.org/pub/software/scm/git/git-2.9.3.tar.gz
(注:最新版本 git-2.12.2

二、解压安装

tar zvxf git-2.9.3.tar.gz # 解压
cd git-2.9.3 #打开
./configure --prefix=/usr/local/git # 默认会安装在 /usr/local/bin,/usr/local/lib
make
make install #安装完成

#目录
ln -s /usr/local/git/bin/git /usr/bin/git

# 查看版本
git --version 

如果报错如下:

Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 3.
BEGIN failed--compilation aborted at Makefile.PL line 3.
make[1]: *** [perl.mak] 错误 2
make: *** [perl/perl.mak] 错误 2 

则需要安装以下2个软件:

yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker 

三、搭建本地git服务器

在服务器做如下操作:

groupadd git; #添加git用户组
useradd -g git git -s /bin/false #添加git用户

cd /home/git # 打开git用户目录
git init --bare sample.git #在当前目录建git空仓库sample.git
chown -R git:git sample.git #更改仓库目录权限,这步不能忘记

mkdir /home/git/.ssh; #创建.ssh目录
touch .ssh/authorized_keys #创建authorized_keys 文件,用来存储git客户端用户的公钥
cat /home/git/id_rsa.pub >> .ssh/authorized_keys # 将从客户端上传来的公钥文件导入到authorized_keys中 

服务器操作完成后,就可在客户端远程克隆空仓库

git clone git@192.168.1.241:/home/git/sample.git #远程克隆仓库

四、GIT服务器实现web代码自动部署

**1、git机制简要介绍 **
git使用的是代码仓库,git服务端有仓库,称为远端仓库,我们clone下来的,本地也有一个仓库称为本地仓库。我们commit的时候是把代码提交到了本地仓库,push时是把代码提交到了远端仓库,pull的时候是把代码从远端仓库下载到本地仓库。
代码仓库对代码的存储使用了版本指针,每个提交的版本都对应一个HEAD指针,当前版本指针随着代码的提交一直改变。

2、自动部署原理
说说现在代码的分布情况,开发者电脑上的本地仓库,git服务器上的远端仓库,web服务器上的另一个本地仓库,我们浏览器访问的就是这里的代码。

要实现自动部署,就是要当开发者从本地仓库提交代码到远端仓库的时候,自动把代码部署到web服务器的本地仓库,实现开发者本地仓库和web服务器的本地仓库的同步。

3、实现自动部署
按照上面说的,就是要在开发者提交的时候,自动触发脚本,脚本去实现web端代码的部署。
这里就得讲一下git的hook机制,当git服务器接到各种事件时触发,这里使用的hook是post-receive,这个hook在git服务器受到push请求,并且接受完代码提交时触发。

具体代码体现:
在git远端仓库的hooks目录下新建post-receive文件:

#!/bin/sh   
#author: embbnux  
#Blog of Embbnux: http://www.embbnux.com   
#判断是不是远端仓库  
IS_BARE=$(git rev-parse --is-bare-repository)  
if [ -z "$IS_BARE" ]; then  
echo >&2 "fatal: post-receive: IS_NOT_BARE"  
exit 1  
fi   
unset GIT_DIR  
DeployPath="/var/web"  
   
echo "==============================================="  
cd $DeployPath  
echo "deploying the test web"  
   
#git stash  
#git pull origin master  
git fetch --all  
git reset --hard origin/master  
   
time=`date`  
echo "web server pull at webserver at time: $time."  
echo "================================================"  

保存后赋予可执行权限:

chmod +x hooks /post-receive

这样在开发者提交代码的时候,就会自动部署。

在这里补充说明下: 因为我建立git仓库时用的是git用户 但是在自动部署时站点服务器采用的是nginx服务器的 git用户属于git组 nginx属于nginx组 所以在这里就是把post-receive设置成nginx组 如果不设置的话在站点目录下是没有办法更新文件的(会提示没有权限操作)


自动部署的时候,我这里使用的是git fetch,也可以使用git pull实现,这里两个的区别主要是pull事先fetch后然后再用merge,来合并本地和远端的代码。但是有个问题,如果开发者在提交过程出现失误,使用git reset复位后,现在远端的代码版本低于web端的代码版本,再使用pull的时候就不能实现和开发者本地的代码的同步。所以这里使用fetch后,在强制使用reset实现web端的代码版本指针和git服务端的一致。由于没有使用merge,所以以后web端的代码就不能在服务器上直接更改了,对web端代码的各种改变都应该使用开发者电脑进行代码提交,不然会报错。

参考资料:
Git教程 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
GIT服务器实现web代码自动部署 http://blog.csdn.net/hsany330/article/details/49888447

相关文章

网友评论

    本文标题:centos 编译安装git-2.9.3

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