【shell脚本-批量爬取git仓库】

标题1.批量爬取git连接简述

一般爬取git连接的方式都是http|git方式,有些仓库还必须克隆时还必须登录(可以考虑使用 expect 解决)。并且克隆后还需要进入到不同的项目中进行git pull进行更新操作。这个脚本是个定时脚本,data.txt是一个仓库地址列表(例如:https://github.com/opcfoundation/ua-ansic-legacy),脚本会通过遍历txt中的列表克隆仓库到 ${1} 你传入的存储地址(最后不要加/)中。

标题2.脚本如下:

#! /bin/bash
echo "------------------------------------"
echo "----------开始执行更新脚本----------"
echo "------------------------------------"
date
#存储目录不能以/结尾
save_path=${1}
git_str=".git"
for line in $(cat data.txt)
do
	path_str="${line##*/}";
        if [[ $path_str == *$git_str* ]]
        then
        	path_str=${path_str%.git};
        fi
	echo "仓库名称为:${path_str}"
	if [ -d "$save_path/$path_str" ]
	then
		echo "本地git仓库存在"
		echo "切换到本地git目录"
		echo '$path_str'
		cd $save_path/$path_str;
		path=`pwd`
		echo $path
		
		if [ "$path" == "$save_path/$path_str" ]
		then
				echo "目录切换成功,准备拉取最新代码"
		else
				echo "目录切换失败,退出程序"
				exit 0;
		fi
		
		echo "开始拉取最新代码"
		#if [[ -n $(git diff --stat) ]];then
		#	echo "本地仓库存在修改!"
	#		date > antiy_dirty.log 2>&1;
	#		git diff >> antiy_dirty.log 2>&1;
	#	fi
		git pull -v
		ret=$?
		echo $ret
		if [ $ret != 0 ]; then
			date >> antiy_difty.log;
			echo "$line,更新失败!\n" >> $save_path/pullOut.log;
			echo "更新失败,请检查网络!"
		else
			echo "更新成功!"
		fi
	else
		echo "文件夹不存在"
		cd $save_path;
		echo "-----------开始克隆-------------------"
		echo "--------$line-------------------------"
		git clone $line
		ret=$?
                if [ $ret != 0 ]; then
			date >> $save_path/cloneOut.log;
                        echo "$line,克隆失败!\n" >> $save_path/cloneOut.log;
                else
			echo "-----------克隆成功-------------------"	
		fi
	fi
done	

date
echo "----------结束执行脚本----------"

标题3.执行脚本

#参数为存储地址
$ bash git_down.sh /opt/down

你可能感兴趣的:(linux,git,github)