Git 自动化拉取更新脚本 🐙 一键自动化拉取 Git 仓库更新的高效脚本工具,支持单个项目和批量操作
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' # No Color
echo -e "${BLUE}🔍 开始检查 Git 仓库更新...${NC}"
# 检查当前目录是否为 Git 仓库
if [ ! -d .git ]; then
echo -e "${RED}❌ 当前目录不是 Git 仓库!${NC}"
exit 1
fi
# 获取远程 URL 和当前分支
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}"
# 查找所有 Git 仓库
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
|
# 添加到 ~/.bashrc 或 ~/.zshrc
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
|
# 更新指定目录下的所有 Git 仓库
bash <(curl -sL gitee.com/meimolihan/script/raw/master/sh/git/git_update_all.sh) /path/to/your/projects
|
2. 🔍 只检查不实际拉取(dry-run)
1
2
|
# 修改脚本添加 dry-run 功能
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 自动化脚本能大大提高您的工作效率!如有任何问题或建议,欢迎反馈和改进。