Git拆库脚本

# @Author: Jrri
# @Date:   2022-08-11 16:23:37
# @Last Modified by:   Jrri
# @Last Modified time: 2022-08-11 17:10:13
# 实现将Git仓库中的某个分支中的某目录,在保存提交记录的情况下单独拆出, 并上传到新库的操作
# 注意: 该脚本只针对一个分支进行拆分, 拆分后默认上传到master分支

# 需要准备: 手动创建新仓库, 本地确保已配置了新旧仓库所在服务的SSH免密, 并拥有权限
# 参数: 
##	原仓库(ORIGIN_REPO_URL): 原仓库的URL
##	分支名(ORIGIN_BRANCH_NAME): 需要拆分代码所在分支
##	目录(ORIGIN_PATH): 需要拆分代码所在的目录
##	目标仓库(TARGET_REPO_URL): 目标仓库的URL


ORIGIN_REPO_URL="git@git.XXX.com:Jrri/test.git"
TARGET_REPO_URL="git@git.XXX.com:Jrri/test_split.git"
ORIGIN_BRANCH_NAME="master"
ORIGIN_PATH="src/tools"



SCRIPT_DIR=$(readlink -f $0|xargs dirname)
TIMESTAMP="$(date +%Y%m%d%H%M%S)"
OLD_DIR_NAME="$(echo $ORIGIN_REPO_URL|sed -ne 's#.*/\(.*\).git#\1#p')-$TIMESTAMP"

# clone库
git clone $ORIGIN_REPO_URL -b $ORIGIN_BRANCH_NAME $OLD_DIR_NAME
cd $OLD_DIR_NAME
NEW_DIR_NAME="$(basename $ORIGIN_PATH)"

# 需要从Git仓库的顶级开始输入目录
git subtree split -P $ORIGIN_PATH -b $TIMESTAMP
git checkout $TIMESTAMP
cd $SCRIPT_DIR

# 创建一个新库
mkdir "$NEW_DIR_NAME-$TIMESTAMP"
cd "$NEW_DIR_NAME-$TIMESTAMP"
git init

# 拉取代码
git pull ../$OLD_DIR_NAME


# 添加远程库
git remote add origin $TARGET_REPO_URL 
git push --set-upstream origin master
posted @ 2022-08-11 17:14  Jrri  阅读(52)  评论(0编辑  收藏  举报