背景
某天打开github想要clone一个比较大的项目,大概1.5个G 结果发现总是会在中途中断,然后从0开始,每次都手动去弄麻烦的要死。守在电脑前守了半个多小时,发现根本clone不下来! 离谱。
解决办法
1 总体流程
总体来说 比较好用的从github上gitclone大项目的流程是这样
新建目录, 命令行进入目录,执行 git init
命令行执行: git fetch [项目地址]
若断掉后,重复执行步骤2, 直到完成下载
命令行执行 git checkout FETCH_HEAD
命令行执行 git remote add origin [项目地址]
命令行执行 git pull origin master
命令行执行 git checkout master
git pull
2 通过脚本
在执行第二步 git fetch 的时候 ,其实也是会频繁中断的,跟gitclone中断的频率差不多,但是貌似这一步会有缓存?? 我不清楚哦
通过这个脚本 可以不停的fetch 直到结束。
#!/bin/bash
set -x
num=1
while [ $num -le 2000 ]; do
git fetch https://github.com/xxx.git
if [ $? -ne 0 ]; then
num=$(($num+1))
else
break
fi
done
最终解决方案
如果有兴趣 可以使用这个脚本
#!/bin/bash
set -x
# 从命令行获取项目URL和分支名称
PROJECT_URL=$1
BRANCH_NAME=${2:-master}
# 从URL中提取项目名称
PROJECT_NAME=$(basename -s .git $PROJECT_URL)
# 新建目录并进入
mkdir $PROJECT_NAME && cd $PROJECT_NAME
# 初始化Git仓库
git init
# 设置重试次数
RETRY_LIMIT=2000
# 开始fetch操作
num=1
while [ $num -le $RETRY_LIMIT ]; do
git fetch $PROJECT_URL
if [ $? -ne 0 ]; then
echo "Fetch failed, retrying ($num/$RETRY_LIMIT)..."
num=$(($num+1))
else
echo "Fetch succeeded."
break
fi
done
# 如果fetch成功,继续执行后续步骤
if [ $num -le $RETRY_LIMIT ]; then
# 切换到FETCH_HEAD
git checkout FETCH_HEAD
# 添加远程仓库
git remote add origin $PROJECT_URL
# 拉取指定分支
git pull origin $BRANCH_NAME
# 检查是否需要再次拉取
git checkout $BRANCH_NAME
git pull
else
echo "Failed to fetch project after $RETRY_LIMIT attempts."
fi
openai生成的代码,,,比我写的好多了😓
使用方式
bash clone_project.sh https://github.com/username/project.git main
后面两个参数分别是项目地址 目标分支