add git scripts

pull/11/head
Zhang Peng 2020-01-02 22:25:10 +08:00
parent cdc6b778e0
commit d13e0f3833
2 changed files with 221 additions and 0 deletions

View File

@ -0,0 +1,65 @@
#!/usr/bin/env bash
# ------------------------------------------------------------------------------
# ASCII 颜色变量
BLACK="\033[1;30m"
RED="\033[1;31m"
GREEN="\033[1;32m"
YELLOW="\033[1;33m"
BLUE="\033[1;34m"
PURPLE="\033[1;35m"
CYAN="\033[1;36m"
RESET="\033[0m"
# 常量
YES=0
NO=1
# ------------------------------------------------------------------------------
printf "$BLUE"
cat << EOF
# ------------------------------------------------------------------------------
# 检查当前目录是否为 git 工程
# ------------------------------------------------------------------------------
EOF
printf "$RESET"
# 检查指定的路径是不是一个 git 项目
checkGit() {
source=$1
if [[ -d "${source}" ]]; then
cd ${source} || return ${NO}
# 1删除git状态零时文件
if [[ -f "gitstatus.tmp" ]]; then
rm -rf gitstatus.tmp
fi
# 2判断是否存在 .git 目录
if [[ -d "./.git" ]]; then
# 3判断git是否可用
git status &> gitstatus.tmp
gitStatus=false
grep -iwq 'not a git repository' gitstatus.tmp && gitStatus=false || gitStatus=true
rm -rf gitstatus.tmp
if [[ ${gitStatus} == true ]]; then
return ${YES}
else
return ${NO}
fi
fi
fi
return ${NO}
}
##################################### MAIN #####################################
ROOT=$(pwd)
printf "${BLUE}当前目录为:${ROOT} ${RESET}\n"
checkGit ${ROOT}
if [[ "${YES}" == "$?" ]]; then
printf "${GREEN}${ROOT} 是 git 工程。${RESET}\n"
exit ${YES}
else
printf "${RED}${ROOT} 不是 git 工程。${RESET}\n"
exit ${NO}
fi

View File

@ -0,0 +1,156 @@
#!/usr/bin/env bash
# ------------------------------------------------------------------------------
# console color
BLACK="\033[1;30m"
RED="\033[1;31m"
GREEN="\033[1;32m"
YELLOW="\033[1;33m"
BLUE="\033[1;34m"
PURPLE="\033[1;35m"
CYAN="\033[1;36m"
RESET="$(tput sgr0)"
# 常量
YES=0
NO=1
SUCCEED=0
FAILED=1
# ------------------------------------------------------------------------------
printf "$BLUE"
cat << EOF
################################################################################
# 项目初始化脚本
################################################################################
EOF
printf "$RESET"
# 检查指定的路径是不是一个 git 项目
checkGit() {
source=$1
if [[ -d "${source}" ]]; then
cd ${source} || return ${NO}
# 1删除git状态零时文件
if [[ -f "gitstatus.tmp" ]]; then
rm -rf gitstatus.tmp
fi
# 2判断是否存在 .git 目录
if [[ -d "./.git" ]]; then
# 3判断git是否可用
git status &> gitstatus.tmp
gitStatus=false
grep -iwq 'not a git repository' gitstatus.tmp && gitStatus=false || gitStatus=true
rm -rf gitstatus.tmp
if [[ ${gitStatus} == true ]]; then
return ${YES}
else
return ${NO}
fi
fi
fi
return ${NO}
}
cloneOrFetchGit() {
root=$1
group=$2
project=$3
branch=$4
if [[ ! -d "${root}" ]]; then
printf "${YELLOW}>>>> ${root} is not directory.${RESET}\n"
return ${FAILED}
fi
if [[ ! ${group} ]] || [[ ! ${project} ]] || [[ ! ${branch} ]]; then
printf "${YELLOW}>>>> group, project, branch must not be empty.${RESET}\n"
return ${FAILED}
fi
source=${root}/${group}/${project}
printf "${CYAN}>>>> project directory is ${source}.${RESET}\n"
printf "${CYAN}>>>> git url is ${REPOSITORY}:${group}/${project}.git.${RESET}\n"
mkdir -p ${root}/${group}
checkGit ${source}
if [[ "${YES}" == "$?" ]]; then
# 如果 ${source} 是 git 项目,执行 pull 操作
cd ${source} || return ${FAILED}
git checkout -f ${branch}
if [[ "${SUCCEED}" != "$?" ]]; then
printf "${RED}>>>> git checkout ${branch} failed.${RESET}\n"
return ${FAILED}
fi
printf "${GREEN}>>>> git checkout ${branch} succeed.${RESET}\n"
git reset --hard
if [[ "${SUCCEED}" != "$?" ]]; then
printf "${RED}>>>> git reset --hard failed.${RESET}\n"
return ${FAILED}
fi
printf "${GREEN}>>>> git reset --hard succeed.${RESET}\n"
git pull
if [[ "${SUCCEED}" != "$?" ]]; then
printf "${RED}>>>> git pull failed.${RESET}\n"
return ${FAILED}
fi
printf "${GREEN}>>>> git pull succeed.${RESET}\n"
else
# 如果 ${source} 不是 git 项目,执行 clone 操作
git clone "${REPOSITORY}:${group}/${project}.git" ${source}
if [[ "${SUCCEED}" != "$?" ]]; then
printf "${RED}>>>> git clone ${project} failed.${RESET}\n"
return ${FAILED}
fi
printf "${GREEN}>>>> git clone ${project} succeed.${RESET}\n"
cd ${source} || return ${FAILED}
git checkout -f ${branch}
if [[ "${SUCCEED}" != "$?" ]]; then
printf "${RED}>>>> git checkout ${branch} failed.${RESET}\n"
return ${FAILED}
fi
printf "${GREEN}>>>> git checkout ${branch} succeed.${RESET}\n"
fi
return ${SUCCEED}
}
doCloneOrFetchGit() {
cloneOrFetchGit $1 $2 $3 $4
if [[ "$?" == "${SUCCEED}" ]]; then
printf "\n${GREEN}>>>> Update git project [$2/$3] succeed.${RESET}\n"
return ${SUCCEED}
else
printf "\n${RED}>>>> Update git project [$2/$3] failed.${RESET}\n"
return ${FAILED}
fi
}
##################################### MAIN #####################################
ROOT=$(pwd)
# 这里需要根据实际情况替换 Git 仓库、项目组、项目、代码分支
REPOSITORY="git@gitee.com"
printf "${CYAN}Current path is ${ROOT}.${RESET}\n"
doCloneOrFetchGit ${ROOT} turnon linux-tutorial master
r1=$?
doCloneOrFetchGit ${ROOT} turnon nginx-tutorial master
r2=$?
if [[ "${r1}" == "${SUCCEED}" && "${r2}" == "${SUCCEED}" ]]; then
printf "\n${GREEN}Succeed.${RESET}\n"
exit ${SUCCEED}
else
printf "\n${RED}Failed.${RESET}\n"
exit ${FAILED}
fi