Featured image of post Git 自动化拉取更新脚本 🐙

Git 自动化拉取更新脚本 🐙

Git 自动化拉取更新脚本 🐙 一键自动化拉取 Git 仓库更新的高效脚本工具,支持单个项目和批量操作

Git 自动化拉取更新脚本 🐙

一键自动化拉取 Git 仓库更新的高效脚本工具,支持单个项目和批量操作

Git 版本控制


📋 目录导航


✨ 脚本功能概述

本指南提供两种实用的 Git 自动化脚本:

  1. 单个项目更新 - 拉取当前 Git 项目的更新
  2. 批量项目更新 - 递归拉取指定目录下所有 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

🚨 六、注意事项和安全建议

  1. 🔐 权限检查:脚本会尝试拉取更新,确保你有相应的权限
  2. 💾 备份重要更改:建议在运行前提交或备份本地修改
  3. 🌐 网络连接:确保稳定的网络连接,特别是大型仓库
  4. 🔌 代理设置:如果使用代理,确保 Git 已正确配置
  5. 🔍 验证脚本:建议查看脚本内容后再执行远程脚本

安全执行远程脚本的方法

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
chmod +x 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

❓ 冲突处理

脚本不会自动处理冲突,如果遇到冲突需要手动解决。


📊 八、性能优化建议

  1. ⚡ 并行处理:对于大量仓库,可以考虑并行执行拉取操作
  2. 📉 增量更新:大型仓库可以设置浅层克隆减少数据传输
  3. 💾 缓存优化:配置 Git 缓存提高重复操作性能
  4. 🎯 选择性更新:只更新需要的分支,减少不必要的网络传输

🎯 提示:这些脚本非常适合自动化部署流程、定期同步多个仓库,或者管理大量的个人项目。建议根据实际需求进行适当的定制和扩展。

希望这些 Git 自动化脚本能大大提高您的工作效率!如有任何问题或建议,欢迎反馈和改进。