批量更新git仓库

        本地有100多个git仓库,手工同步更新是一件麻烦而痛苦的事情!经过分析,可使用git脚本+定时任务,实现自动同步。解放自己,做更有意义的事情。

目录

1、批量更新脚本

2、执行验证脚本

3、查看日志输出

3.1、本地仓库目录

3.2、远程仓库列表

3.3、同步日志列表


运行环境:

  • CentOS-7.9-X86_64
  • Windows-7-Ultimate-x64、Windows-10-BusinessEditions-1909-x64

1、批量更新脚本

        脚本主要功能是通过遍历本地目录,解析本地目录的git仓库信息,并从远程拉取最新代码到本地。

vi /opt/git-repo-sync-script.sh

脚本内容如下(版本已更新至 2022.03.17):

#!/bin/bash
echo "# ##################################################"
echo "# Subject: 遍历git本地仓库拉取更新代码"
echo "#    Date: 2020.11.10"
echo "#  Author: 狂龙骄子"
echo "# BlogUrl: https://blog.csdn.net/Sn_Keys"
echo "#  Remark: 配置定时任务同步,每周一上午9点执行"
echo "#           0 9 * * 1 nohup /opt/git-repo-sync-script.sh"
echo "# ##################################################"

# 设置环境变量:解决git log中文乱码
export LESSCHARSET=utf-8
# 系统日期时间
DATETIME=`date +"%Y%m%d_%H%M%S"`
# 根搜索目录
SEARCH_ROOT_DIR="$1"
# 本地仓库目录列表
GIT_LOCAL_REPO_LIST=${SEARCH_ROOT_DIR}/gitRepoLocalList-${DATETIME}.txt
# 远程仓库地址列表
GIT_REMOTE_REPO_LIST=${SEARCH_ROOT_DIR}/gitRepoRemoteList-${DATETIME}.txt
# 拉取日志
GIT_PULL_LOG=${SEARCH_ROOT_DIR}/gitRepoPullLog-${DATETIME}.txt

# 获取所有.git文件夹
find "${SEARCH_ROOT_DIR}" -type d -name ".git">"${GIT_LOCAL_REPO_LIST}"

# 从远程仓库拉取最新
gitPull() {
    echo "------------------------------`date +\"%Y-%m-%d %H:%M:%S\"`------------------------------"
    echo "本地目录: $1"
    echo "远程仓库: $2"

    git pull -v
    echo -e "\n\n"
}

# 遍历本地仓库目录
while read line ; do
    cd "$line/../"
    # 获取远程仓库地址
    REMOTE_REPO_URL=`git remote -v | awk 'NR==1{print $2}'`
    echo "${REMOTE_REPO_URL}">>"${GIT_REMOTE_REPO_LIST}" 2>&1 &
    # 从远程仓库拉取最新
    gitPull "`pwd`" "${REMOTE_REPO_URL}">>"${GIT_PULL_LOG}" 2>&1 &
done < "${GIT_LOCAL_REPO_LIST}"

# 返回根搜索目录
cd "${SEARCH_ROOT_DIR}"

2、执行验证脚本

脚本的共1个参数,为要解析的根目录。

sh /opt/git-repo-sync-script.sh /opt/GitRepoClone/

每次脚本执行完成后,会在 指定的 根搜索目录 下生成3个日志文件:

  • 本地仓库目录:gitRepoLocalList-*.txt
  • 远程仓库列表:gitRepoRemoteList-*.txt
  • 同步日志明细:gitRepoPullLog-*.txt

批量更新git仓库_第1张图片

Linux系统,可以配合 crontab 定时任务使用。

3、查看日志输出

  • 3.1、本地仓库目录

批量更新git仓库_第2张图片

  • 3.2、远程仓库列表

迁移、分享时,可以通过 远程仓库列表文件 快速查找。

批量更新git仓库_第3张图片

  • 3.3、同步日志列表

详细记录每个仓库远程地址、本地目录、变更内容。

批量更新git仓库_第4张图片

建议:

由于是通过shell脚本批量更新,速度很快,可以在每个仓库同步成功后,设置一个暂停时间(如:1秒~5秒),避免被 github 墙。

        以上脚本还有优化的地方(如:部分仓库可能突然被设置需要登录github、gitee后才能同步,此时需要人工干预),请根据实际需求调整修改。

        欢迎留言、交流……


附录:

  • Windows下执行Shell脚本,建议安装Git

你可能感兴趣的:(Linux,Shell脚本,定时任务,自动同步,git仓库,批量同步)