赞
踩
本地有100多个git仓库,手工同步更新是一件麻烦而痛苦的事情!经过分析,可使用git脚本+定时任务,实现自动同步。解放自己,做更有意义的事情。
目录
运行环境:
脚本主要功能是通过遍历本地目录,解析本地目录的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}"
脚本的共1个参数,为要解析的根目录。
sh /opt/git-repo-sync-script.sh /opt/GitRepoClone/
每次脚本执行完成后,会在 指定的 根搜索目录 下生成3个日志文件:
Linux系统,可以配合 crontab 定时任务使用。
迁移、分享时,可以通过 远程仓库列表文件 快速查找。
详细记录每个仓库远程地址、本地目录、变更内容。
建议:
由于是通过shell脚本批量更新,速度很快,可以在每个仓库同步成功后,设置一个暂停时间(如:1秒~5秒),避免被 github 墙。
以上脚本还有优化的地方(如:部分仓库可能突然被设置需要登录github、gitee后才能同步,此时需要人工干预),请根据实际需求调整修改。
欢迎留言、交流……
附录:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。