首页 > 其他分享 >Git仓库迁移实操(附批量迁移脚本)

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

时间:2023-03-06 23:03:48浏览次数:54  
标签:git remote 仓库 repo -- Git 实操 迁移

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

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

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

一、迁移命令

命令迁移有三种方案。

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 内容,是没有工作目录的。这是不同于镜像仓库的地方。

二、批处理脚本

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

输入文件 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,remote,仓库,repo,--,Git,实操,迁移
From: https://www.cnblogs.com/xxcbdhxx/p/how-to-migrate-git-repository-with-command-line.html

相关文章

  • 【Git】常用命令清单
    <1>Git常识:常见的git类软件有三种:gitlab,github,gitee共同点:都是基于git延伸开发出来的产品,用于软件版本控制-代码托管的平台差异点:github:代码在云端,私有仓库从收......
  • 【Git】代码权限&分支管理
    以Gitlab代码托管平台说明,也是目前应用最为广泛的企业搭建私服的选择。1. 权限管理[项目]访问权限有3种::Private、Internal、PublicPrivate:只有组成员才能看......
  • jenkins学习笔记之八:jenkins认证集成gitlab
    1.gitlab创建新应用2.jenkins安装gitlab插件3.插件安装完成后全局安全配置中使用并配置gitlab认证4.注销重新登录后自动使用gitlab当前登录账号登录jenkins必须和......
  • Github-Actions使用release-please实现自动发版
    ​releaseplease​是一个来自于Google​的自动发版工具,基于GithubActions可实现全自动发版。官网:https://github.com/googleapis/release-please上手在项目根目......
  • 【Git】代码权限&分支管理
    以Gitlab代码托管平台说明,也是目前应用最为广泛的企业搭建私服的选择。1. 权限管理[项目]访问权限有3种::Private、Internal、PublicPrivate:只有组成员才能看到......
  • .gitignore文件用法及如何配置
    .gitignore文件是在git提交的时候用来屏蔽某些你不想提交上去的文件。项目开发过程中,有时候不想把一些文件(如中间文件/编译文件等)提交到git上。这个时候就由.gitignore文......
  • git常用基本指令及用法含义
      工作原理:说明:workspace:工作区stagingarea:暂存区/缓存区localrepository:版本库或本地仓库remoterepository:远程仓库一个简单的操作gitinit-初始化仓......
  • idea操作gitee补充
    31.IDEA中使用GIT-远程仓库-创建与关联远程仓库gitee目标​ gitee中创建远程仓库并在IDEA中关联远程仓库内容创建仓库新建:git-project-sk创建步骤省略,如果忘记,可......
  • kepware高级插件IOT Gateway_Rest Client和NodeRed实操
    1,安装Kepware软件,使用Iot高级插件需要有Java环境,下载地址为: https://www.oracle.com/文件名称为:jdk-7u79-windows-i5862,RestClient配置     ......
  • git拉取远程分支到本地
    1.新建一个文件夹2.初始化gitinit3.本地仓库和远程仓库建立连接[email protected]:fireworkwing/saveFileService.git4.拉取所有分支到本地仓库......