gpt4 book ai didi

Git仓库迁移实操(附批量迁移脚本)

转载 作者:我是一只小鸟 更新时间:2023-03-07 06:31:15 26 4
gpt4 key购买 nike

最近公司组织架构调整,整个组换到新部门,需要将原来组内的项目代码,全部迁移到新的 group 中去(公司用的 gitlab 服务器),要求保留所有的提交记录、分支和标签.

我当然知道 Gitlab 本身是支持创建仓库时通过链接导入的,但前提是管理员开启相关功能。我们此处只讲命令迁移方案.

本文同步发布于个人网站 https://ifuyao.com 。

1、迁移命令

命令迁移有三种方案.

1. 直接PUSH

  1. 保证本地仓库最新
                        
                          # 若本地没有仓库,则直接 clone 仓库到本地
$ git clone git@host:group1/repo.git && cd repo
# 若本地已有仓库,则拉取分支和标签
$ git pull && git pull --tags
# 设置源
$ git remote set-url origin git@host:group2/repo.git
# 推送分支和标签
$ git push && git push --tags

                        
                      

2. 镜像

可以将源端仓库,镜像克隆到本地,再镜像推送到目的端.

                        
                          git clone --mirror git@host:group1/repo.git
git push --mirror git@host:group2/repo.git

                        
                      

3. 裸仓库

可以将源端仓库,克隆下来裸仓库,再镜像推送到目的端.

                        
                          $ git clone --bare git@host:group1/repo.git
$ git push --mirror git@host:group2/repo.git

                        
                      

裸仓库是 git 中的一个概念,只要在克隆时加一个 -–bare 选项即可。裸仓库可以再次push到另一个源,所以可以完成我们仓库迁移的任务.

需要注意,克隆下来的裸仓库中只有 .git 内容,是没有工作目录的。这是不同于镜像仓库的地方.

2、批处理脚本

我们需要迁移的项目有几十个,所以我这边写了个简单的批处理脚本,在此也也分享给有需要的伙伴.

输入文件 repos.txt 中按行写入要迁移的仓库名称:

                        
                          repo1
repo2
repo3

                        
                      

Linux/MacOS 迁移脚本 migrate.sh 。

                        
                          #!/bin/bash

remote_old=git@host1:group1
remote_new=git@host2:group2

while read repo
do
    echo $repo
    git clone --bare "$remote_old/${repo}.git"
    cd "${repo}.git"
    git push --mirror "$remote_new/${repo}.git"
    cd ..
    rm -fr "${repo}.git"
done < repos.txt

                        
                      

Windows 迁移脚本 migrate.bat 。

                        
                          @echo off

set remote_old=git@host1:group1
set remote_new=git@host2:group2
set input_file=repos.txt

SETLOCAL DisableDelayedExpansion
FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ %input_file%"`) do (
    call :process %%a
)
goto :eof

:process
SETLOCAL EnableDelayedExpansion
set "repo=!%1!"
set "repo=!repo:*:=!"
echo !repo!
git clone --bare "%remote_old%/!repo!.git"
cd "!repo!.git"
git push --mirror "%remote_new%/!repo!.git"
cd ..
rmdir "!repo!.git"
ENDLOCAL
goto :eof

                        
                      

若对您有用,请一键三连(点赞、收藏、转发),谢谢.

本文已独家授权给公众号 逻魔代码 ,未经允许,禁止转载! 。

最后此篇关于Git仓库迁移实操(附批量迁移脚本)的文章就讲到这里了,如果你想了解更多关于Git仓库迁移实操(附批量迁移脚本)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com