#!/bin/bash # # æ£æ¥èæ¬åæ°ï¼å¦å¿ è¦åæ°æªä¼ å ¥ï¼éåºèæ¬ã # checkInput() { if [ "${repository}" == "" ] || [ "${branch}" == "" ]; then echo "请è¾å ¥èæ¬åæ°ï¼repository branch [source] [target]" echo " repository: git ä»å¨ï¼å¿ å¡«ï¼ã" echo " branch: git 忝ï¼å¿ å¡«ï¼ãå¦ master/develop" echo " source: 代ç åæ¾ç®å½ãé»è®¤ä¸º/home/zp/sourceã" echo " target: 代ç åæ¾ç®å½ãé»è®¤ä¸ºèæ¬æå¨ç®å½ã" exit 0 fi } # # 夿 git çæ¬åºæ¯å¦åå¨ãæ ¹æ®å®é ç»æä¿®æ¹ ${gitok} å¼ã # gitok=false isGitExist() { cd ${SOURCE_PATH} if [ -d "${SOURCE_PATH}/${repository}/${target}" ]; then cd ${SOURCE_PATH}/${repository}/${target} #(1)å é¤gitç¶æé¶æ¶æä»¶ if [ -f "gitstatus.tmp" ]; then rm -rf gitstatus.tmp fi #(2) 夿æ¯å¦åå¨.gitç®å½ if [ -d "./.git" ]; then #(3) 夿gitæ¯å¦å¯ç¨ git status &> gitstatus.tmp grep -iwq 'not a git repository' gitstatus.tmp && gitok=false || gitok=true fi #è¿åå°ä¸»ç®å½ cd ${SOURCE_PATH} fi } # # 妿 git çæ¬åºåå¨ï¼æ ¹æ® ${gitok} å¼ï¼ï¼æ§è¡ fetch æä½ï¼åä¹ï¼æ§è¡ clone æä½ã # doFetchOrClone() { if [ ! -d "${SOURCE_PATH}" ]; then mkdir -p ${SOURCE_PATH} fi if ${gitok}; then cd ${SOURCE_PATH}/${repository}/${target} git reset --hard git clean -ffdx git fetch echo "git fetch ${repository} remote repository å°æ¬å°æå" else #å 餿æå 容,便äºéæ°è¿è¡git clone rm -rf ${repository} git clone --no-checkout [email protected]:${ACCOUNT}/${repository}.git ${SOURCE_PATH}/${repository}/${target} echo "git clone ${repository} remote repository å°æ¬å°æå" cd ${SOURCE_PATH}/${repository}/${target} fi } # # åæ¢å° ${branch} 忝 # doCheckout() { echo "æ£åº ${repository} ${branch} 忝代ç " isRemoteBranch=false gitRemoteBranch=`git branch -r` echo -e "$gitRemoteBranch" | grep -iwq ${branch} && isRemoteBranch=true || isRemoteBranch=false if ${isRemoteBranch}; then echo "æ¾å° ${branch} 对åºçè¿ç«¯åæ¯" git checkout -f 'origin/'${branch} else git checkout -f ${branch} fi echo "æ´æ°å模å代ç " git submodule update --init --recursive --force } ##############################__MAIN__######################################## export LANG="zh_CN.UTF-8" # Github è´¦æ· ACCOUNT=dunwu # æºç é»è®¤æ ¹ç®å½ SOURCE_PATH=/home/zp/source # å¿ å¡«è¾å ¥åæ° repository=`echo $1` branch=`echo $2` # å¯éè¾å ¥åæ° source=`echo $3` target=`echo $4` if [ "${source}" != "" ]; then SOURCE_PATH=${source} fi # 0. æ£æ¥ä¼ å ¥çåæ° checkInput # 1. 夿æ¬å°æ¯å¦å·²åå¨ Git ä»åº isGitExist # 2. 妿æ¬å°å·²æä»£ç ï¼æ§è¡ fetchï¼åä¹ï¼ä»è¿ç¨ clone doFetchOrClone # 3. 忢尿å®åæ¯ doCheckout echo "ä»£ç æ£åºå®æï¼"