Git 自动化拉取更新脚本 🐙

一键自动化拉取 Git 仓库更新的高效脚本工具,支持单个项目和批量操作
📋 目录导航
✨ 脚本功能概述
本指南提供两种实用的 Git 自动化脚本:
- 单个项目更新 - 拉取当前 Git 项目的更新
- 批量项目更新 - 递归拉取指定目录下所有 Git 仓库的更新
🚀 一、单个项目更新脚本
从 GitHub 仓库拉取更新
1
| bash <(curl -sL script.meimolihan.eu.org/sh/git/git_update.sh)
|
从 Gitee 仓库拉取更新(国内加速)
1
| bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/git/git_update.sh)
|

脚本功能特点:
- ✅ 自动检测当前目录是否为 Git 仓库
- ✅ 拉取远程所有分支的最新更新
- ✅ 显示详细的更新状态和变更信息
- ✅ 友好的颜色提示和错误处理
- ✅ 支持 HTTP 和 SSH 协议的仓库
📦 二、批量项目更新脚本
1. 📂 在 FnOS 终端执行批量更新
1 2
| cd /vol1/1000/home && \ bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/git/git_update_all.sh)
|
2. 💻 从 Windows Git Bash 远程执行批量更新
1 2
| ssh fnos "cd /vol1/1000/home && \ bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/git/git_update_all.sh)"
|

批量脚本功能特点:
- 🔍 递归搜索指定目录下的所有 Git 仓库
- 📊 显示每个仓库的更新状态汇总
- ⏱️ 显示每个仓库的操作耗时
- 🎨 彩色输出,清晰区分成功/警告/错误
- 📝 生成详细的更新报告摘要
🛠️ 三、脚本源码参考
单个项目更新脚本 (git_update.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #!/bin/bash
RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m'
echo -e "${BLUE}🔍 开始检查 Git 仓库更新...${NC}"
if [ ! -d .git ]; then echo -e "${RED}❌ 当前目录不是 Git 仓库!${NC}" exit 1 fi
REMOTE_URL=$(git remote get-url origin) CURRENT_BRANCH=$(git branch --show-current)
echo -e "📦 仓库: ${GREEN}$(basename -s .git $(git config --get remote.origin.url))${NC}" echo -e "🌐 远程: ${BLUE}$REMOTE_URL${NC}" echo -e "🌿 分支: ${YELLOW}$CURRENT_BRANCH${NC}" echo -e "${BLUE}========================================${NC}"
echo -e "🔄 拉取远程更新..." if git pull origin $CURRENT_BRANCH; then echo -e "${GREEN}✅ 更新成功完成!${NC}" else echo -e "${RED}❌ 拉取更新失败!${NC}" exit 1 fi
echo -e "${BLUE}========================================${NC}" echo -e "📋 最新更新内容:" git log -1 --oneline --decorate --color
echo -e "${GREEN}🎉 所有操作完成!${NC}"
|
批量项目更新脚本 (git_update_all.sh)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| #!/bin/bash
RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m'
TOTAL_REPOS=0 SUCCESS_COUNT=0 FAIL_COUNT=0 SKIP_COUNT=0
echo -e "${CYAN}🔍 开始搜索 Git 仓库...${NC}"
find . -name ".git" -type d | while read git_dir; do repo_dir=$(dirname "$git_dir") cd "$repo_dir" || continue REPO_NAME=$(basename "$repo_dir") TOTAL_REPOS=$((TOTAL_REPOS + 1)) echo -e "${BLUE}========================================${NC}" echo -e "🔄 处理仓库: ${CYAN}$REpo_NAME${NC}" if git remote get-url origin &>/dev/null; then REMOTE_URL=$(git remote get-url origin) CURRENT_BRANCH=$(git branch --show-current 2>/dev/null || echo "未知") echo -e "🌿 分支: ${YELLOW}$CURRENT_BRANCH${NC}" echo -e "🌐 远程: ${BLUE}$REMOTE_URL${NC}" START_TIME=$(date +%s) if git pull --ff-only; then END_TIME=$(date +%s) DURATION=$((END_TIME - START_TIME)) echo -e "${GREEN}✅ 更新成功 (${DURATION}s)${NC}" SUCCESS_COUNT=$((SUCCESS_COUNT + 1)) else echo -e "${RED}❌ 更新失败${NC}" FAIL_COUNT=$((FAIL_COUNT + 1)) fi else echo -e "${YELLOW}⚠️ 无远程仓库,跳过${NC}" SKIP_COUNT=$((SKIP_COUNT + 1)) fi cd - >/dev/null || exit done
echo -e "${BLUE}========================================${NC}" echo -e "${CYAN}📊 更新完成汇总:${NC}" echo -e "📦 总仓库数: $TOTAL_REPOS" echo -e "${GREEN}✅ 成功更新: $SUCCESS_COUNT${NC}" echo -e "${RED}❌ 更新失败: $FAIL_COUNT${NC}" echo -e "${YELLOW}⚠️ 跳过仓库: $SKIP_COUNT${NC}" echo -e "${BLUE}========================================${NC}"
|
⚙️ 四、安装和自定义配置
1. 📥 本地安装脚本
1 2 3 4 5 6 7
| curl -o ~/git_update.sh https://gitee.com/meimolihan/script/raw/master/sh/git/git_update.sh chmod +x ~/git_update.sh
curl -o ~/git_update_all.sh https://gitee.com/meimolihan/script/raw/master/sh/git/git_update_all.sh chmod +x ~/git_update_all.sh
|
2. 📁 添加到系统 PATH
1 2 3 4 5 6 7
| sudo mv ~/git_update.sh /usr/local/bin/git-update sudo mv ~/git_update_all.sh /usr/local/bin/git-update-all
git-update git-update-all
|
3. 🔤 创建别名(可选)
1 2 3
| alias gup='bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/git/git_update.sh)' alias gup-all='bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/git/git_update_all.sh)'
|
🔧 五、高级用法和参数
1. 📂 指定目录进行批量更新
1 2
| bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/git/git_update_all.sh) /path/to/your/projects
|
2. 🔍 只检查不实际拉取(dry-run)
1 2
| bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/git/git_update.sh) --dry-run
|
3. 🌿 指定特定分支更新
1 2
| bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/git/git_update.sh) main
|
🚨 六、注意事项和安全建议
- 🔐 权限检查:脚本会尝试拉取更新,确保你有相应的权限
- 💾 备份重要更改:建议在运行前提交或备份本地修改
- 🌐 网络连接:确保稳定的网络连接,特别是大型仓库
- 🔌 代理设置:如果使用代理,确保 Git 已正确配置
- 🔍 验证脚本:建议查看脚本内容后再执行远程脚本
安全执行远程脚本的方法
1 2 3 4 5
| curl -sL gitee.com/meimolihan/script/raw/master/sh/git/git_update.sh
bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/git/git_update.sh)
|
💡 七、常见问题解答
❓ 脚本执行权限问题
解决方案:
❓ 网络连接超时
解决方案:
1 2
| bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/git/git_update.sh)
|
❓ 仓库认证失败
解决方案:
- 确保 SSH 密钥或认证信息已正确配置
- 对于 HTTP 仓库,配置凭据存储:
1
| git config --global credential.helper store
|
❓ 冲突处理
脚本不会自动处理冲突,如果遇到冲突需要手动解决。
📊 八、性能优化建议
- ⚡ 并行处理:对于大量仓库,可以考虑并行执行拉取操作
- 📉 增量更新:大型仓库可以设置浅层克隆减少数据传输
- 💾 缓存优化:配置 Git 缓存提高重复操作性能
- 🎯 选择性更新:只更新需要的分支,减少不必要的网络传输
🎯 提示:这些脚本非常适合自动化部署流程、定期同步多个仓库,或者管理大量的个人项目。建议根据实际需求进行适当的定制和扩展。
希望这些 Git 自动化脚本能大大提高您的工作效率!如有任何问题或建议,欢迎反馈和改进。