一键部署最新的Git(Centos7.3)

一、手动部署步骤:

步骤1、安装编译git时需要的包

# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
# yum install  gcc perl-ExtUtils-MakeMaker

步骤2、删除已有的git

# yum remove git

步骤3、下载git源码,我自己下载的是2.0.0版本的下载地址:http://pan.baidu.com/s/1qXFnOxI

# cd /usr/src
# wget https://www.kernel.org/pub/software/scm/git/git-2.0.5.tar.gz
# tar xzf git-2.0.5.tar.gz

步骤4、编译安装

# cd git-2.0.5
# make prefix=/usr/local/git all
# make prefix=/usr/local/git install
# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
# source /etc/bashrc

步骤5、检查一下版本号

# git --version

二、一键部署脚本

#!/bin/sh
# @author ling

# 定义显示颜色
RED='\e[1;91m'
GREEN='\e[1;92m'
WITE='\e[1;97m'
NC='\e[0m'

OPERATION_PATH=/opt
REMOTE_URL=https://mirrors.edge.kernel.org/pub/software/scm/git/
GIT_UNPACKAGE_NAME=git-2.19.1.tar.gz

# 校验url是否有效
function check_invalid_url()
{
	echo "Check invalid url!"
	if [ ! -n "$1" ];then
		echo -e $RED "Please input url!" $NC
	else
		wget --spider -q  --tries=1 -T 5 $1
		return $?
	fi
}

# 安装Git的依赖包
function install_dependent_packages()
{
	echo "Install dependent packages!"
	yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker && echo -e $GREEN "Install dependent packages success!" $NC
}

# 卸载旧版本的Git
function remove_old_git()
{
	echo "Remove old git!"
	git version
	if [ $? -eq 0 ];then
		yum -y remove git && echo -e $GREEN "Remove old git success!" $NC
	else
		echo -e $WITE "There has no git!" $NC
	fi

}

# 下载Git安装包
function download_git_package()
{	
	echo "Download git package!"
	NUM_1=$(curl $REMOTE_URL | grep -o -E "git-[0-9]+" | grep -o -E "[0-9]+" | sort -un | sed -n '$p')
	NUM_2=$(curl $REMOTE_URL | grep -o -E "git-$NUM_1\.+[0-9]+\." | grep -o -E "\.[0-9]+\." | grep -o -E "[0-9]+" | sort -un | sed -n '$p')
	NUM_3=$(curl $REMOTE_URL | grep -o -E "git-$NUM_1\.$NUM_2\.[0-9]+\.tar\.gz" | grep -o -E "\.[0-9]\.tar\.gz" | grep -o -E "[0-9]+" | sort -un | sed -n '$p')
	GIT_UNPACKAGE_NAME=git-$NUM_1\.$NUM_2\.$NUM_3\.tar.gz
	wget -P $OPERATION_PATH $REMOTE_URL$GIT_UNPACKAGE_NAME && echo -e $GREEN "Download git package success!" $NC
}

# 编译安装Git
function install_git_package()
{
	echo "Install git package!"
	cd $OPERATION_PATH
	GIT_PACKAGE_NAME=$(echo $GIT_UNPACKAGE_NAME | grep -o -E "git-[0-9]+\.[0-9]+\.[0-9]+")
	tar -xzvf $GIT_UNPACKAGE_NAME && rm -rf $GIT_UNPACKAGE_NAME
	cd $GIT_PACKAGE_NAME && make prefix=/usr/local/git all && make prefix=/usr/local/git install && 
	echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc && source /etc/bashrc && echo -e $GREEN "Install git package success!" $NC
}

function main()
{
	echo "Start install git, it may take a moment!"
	# 安装Git的依赖包
	install_dependent_packages
	# 卸载旧版本的Git
	remove_old_git
	check_invalid_url $REMOTE_URL
	if [ $? -eq 0 ];then
		download_git_package
	else
		cp $GIT_UNPACKAGE_NAME $OPERATION_PATH
	fi
	install_git_package
}

main

三、一键部署脚本使用说明

1.下载一键部署脚本
百度云盘链接:https://pan.baidu.com/s/1RZNBn0UprOOmy9PKDb0bdw
提取码:n4e0
2.解压一键部署包,进入包下,使用命令:source start.sh执行部署脚本;
3.使用命令:git --version校验git是否安装成功

四、FAQ

Q:使用if命令,判断上一条命令执行退出的状态是否为0出现如下图错误提示:

在这里插入图片描述

R:[ ]表示条件测试。注意这里的空格很重要。要注意在'['后面和']'前面都必须要有空格
S:在'['后面和']'前面添加空客
Q:shell函数return的值使用echo打印出来发现为空
S:shell函数return的值是赋值给$?
R:在调用shell函数后,直接使用$?获取函数的返回值.
Q:shell 在脚本中执行了source /etc/profile 不生效
S:sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。 
R:运行source filename 或者 .filename即可解决问题。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值