标题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