一、手动部署步骤:
步骤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即可解决问题。