百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

gitlab仓库迁移(组下所有的子组以及项目迁移)

liuian 2025-01-23 18:41 72 浏览

迁移应用场景

1.迁移部分项目到新的仓库地址

2.迁移组以及子组下所有的项目

3.迁移所有gitlab组

要求

1.基本要求

a 新的git地址和老的git地址都有对应的权限token

b 脚本服务器和老的git服务器以及新的git服务器网络通的(ssh方式拉取代码)

c 配置ssh拉取代码(新旧gitlab,可选择https方式)

0.配置ssh方式拉取代码

步骤一:生成SSH密钥

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"   //换成自己的邮箱
  1. 生成成功后,你将在终端或Git Bash中看到一条消息,其中包含公钥的位置,默认为~/.ssh/id_rsa.pub。

步骤二:将SSH公钥添加到GitLab账户

  1. 复制SSH公钥的内容。你可以使用以下命令将其打印到终端或Git Bash中:
  2. cat ~/.ssh/id_rsa.pub



1.获取项目token

配置添加token(有读写api的相关权限)


将token进行记录

2.迁移组

选择要迁移的组


setting----->General---->Advanced------->Export group (导出组文件)


再按创健组的顺序在新的进行导入即可



3.迁移组下所有项目(包括子组下的所有项目)

通过python脚本迁移所有仓库代码

注: 请将对应的token修改,git地址修改

import requests
import os
import subprocess


ACCESS_TOKEN = "*****************"  //迁移token老的git地址token


GITLAB_API_URL = "https://*.*.*.*/api/v4"  //gitlab  api地址

def clone_repo(ssh_url, path):
    if not os.path.exists(path):
        os.makedirs(path)
    print(ssh_url,path)
    subprocess.call(["git", "clone", "--mirror", ssh_url, path])

def push_repo(ssh_url, path):
    new_repo_url = ssh_url.replace("gitlab.fosun.com", "gitlab.assistfc.com")
    os.chdir(path)
    subprocess.call(["git", "remote", "set-url", "--push", "origin", new_repo_url])
    subprocess.call(["git", "push", "--mirror"])
    print("push --mirror new_repo_url %s"%new_repo_url)


def get_subgroups_and_projects(group_id, base_path):
    projects = []
    groups_to_check = [(group_id, base_path)]

    while groups_to_check:
        current_group_id, current_path = groups_to_check.pop(0)

        subgroup_response = requests.get(
            f"{GITLAB_API_URL}/groups/{current_group_id}/subgroups",
            headers={"PRIVATE-TOKEN": ACCESS_TOKEN}
        )
        if subgroup_response.status_code == 200:
            subgroups = subgroup_response.json()
            for subgroup in subgroups:
                subgroup_path = os.path.join(current_path, subgroup['path'])
                groups_to_check.append((subgroup['id'], subgroup_path))

        project_response = requests.get(
            f"{GITLAB_API_URL}/groups/{current_group_id}/projects",
            headers={"PRIVATE-TOKEN": ACCESS_TOKEN}
        )
        if project_response.status_code == 200:
            print("project",project_response)
            for project in project_response.json():
                print("project info",project)
                print("project['path']",project['path'])
                project_path = os.path.join(current_path, project['path'])
                print("project_path",project_path)
                clone_repo(project['ssh_url_to_repo'], project_path)
                push_repo(project['ssh_url_to_repo'], project_path)
                projects.append(project)

    return projects



group_id = ***  //迁移的组id注意修改
base_path = "/tmp/test"   //代码存放目录
projects = get_subgroups_and_projects(group_id, base_path)

执行脚本进行脚本迁移(完成)

相关推荐

路由器wan口正在连接(路由器wan一直显示正在连接怎么回事)

无线路由器WAN口一直无法获取IP,显示正在连接说明外网没有连接成功故障一:需要核实一下运营商的上网方式,比如有宽带账号就选择PPPOE。直接插上可以用的就选择动态IP(自动获取)故障二:线路没有接对...

zip和rar哪个是无损压缩(zip和rar哪个是无损压缩司法鉴定时用哪个压缩文件)

是的,ZIP是一种常见的无损压缩文件格式。在使用ZIP压缩文件时,文件的内容和质量不会发生改变,只是通过压缩算法将文件体积减小,从而节省存储空间或者方便传输。无损压缩意味着解压缩后的文件与原始文件完全...

卡巴斯基免费版怎么激活(卡巴斯基免费版激活码)

是你的激活码过期了,才会出现未激活的情况,要去买一个激活码或导入一个key,如果有钱建议去买个激活码,毕竟正版的好用,如果手头紧的话,就去网上找卡巴的key文件导进去,也可以去论坛上找,就比如,爱卡巴...

极速数据恢复应用(极速数据恢复app安卓版)

在你想要恢复手机上面照片时你就要注意不要再向手机当中储存新的照片了,因为新的照片会对手机以往的删除的照片数据进行覆盖,覆盖之后就不好再恢复了,所以我推荐你在照片被误删后就立即停止使用手机然后找专业的人...

windows定时关机代码(定时关机代码win7)

1、打开电脑,按住【Win+R】组合键,弹出运行命令,在编辑框内输入如下命令:shutdown-s-t3600;电脑定时关机运行2、shutdown-s-t3600命令的含义如下:shut...

金士顿最新u盘(金士顿u盘vendorco)

100元一T金士顿的U盘十有八九是假的。虽然现在U盘的价格比较低。杂牌子64G还得10多块钱呢。何况像大品牌金士顿。现在金士顿128G的U盘最便宜都得八九十块。所以说100元一体的精子真优盘保证是假货...

oppo不小心移除了桌面图标(oppo手机移除了桌面图标)
  • oppo不小心移除了桌面图标(oppo手机移除了桌面图标)
  • oppo不小心移除了桌面图标(oppo手机移除了桌面图标)
  • oppo不小心移除了桌面图标(oppo手机移除了桌面图标)
  • oppo不小心移除了桌面图标(oppo手机移除了桌面图标)
windows7系统好用吗(电脑系统win7好用吗)

win7操作系统现在还是好用的。win7上有很多简单的设计,如跳跃列表、快速最大化、快速系统故障修复、窗口半屏显示等,让人们使用Windows7时更加方便。同时win7系统启动速度非常快,系统加载时...

win10怎么设置开机启动软件(win10设置开机启动软件在哪里)

在Windows10系统中,设置应用开机启动的方法如下:1.打开开始菜单,点击“设置”图标,进入系统设置界面。2.在设置界面中,选择“应用”选项。3.在应用界面中,点击“启动”选项。4....

windows 2003密钥(2003系统秘钥)

WindowsXP、Windows2003专业版x86的原始产品密钥如下:1.x86:FTtx8密钥2.x64:KB99999引起的TPM2.0密钥请注意,这些密钥不能在Windows10...

笔记本cpu天梯图2025年2月(笔记本cpu天梯图2021年9月)

1.荣耀王者段位:A15处理器(5核GPU版)、A15处理器(4核GPU版)不论是从跑分上还是具体体验上,苹果最新的A15处理器都是佼佼者,CPU和GPU大幅领先于安卓现役旗舰SOC2.王者段位:骁龙...

u盘量产失败无法识别如何修复

量产工具修复u盘不动。1.输出USB-CDROM启动光盘安装系统。2.修复U盘,低级格式,恢复出厂状态。3.分区,输出2分区,或更改U盘介质类型(可移动磁盘或固定磁盘)。我们需要在电脑上下载此程...

申请邮箱免费注册163(邮箱免费注册163邮箱)

打开浏览器,找到“163邮箱”,点击。点击右边的“注册”。网站默认注册手机号码邮箱,填写信息,点击“注册”。若不想泄漏手机号码或不想使用手机验证,可点击“注册字母邮箱”。填写信息,点击“注册”,使用“...

wifi 路由器(wifi路由器设置)

1、首先在浏览器上打开路由器登录页面,输入登录密码。2、点击登录进入网络状态页面,在网络状态页面找到路由设置功能。3、鼠标点击路由设置,进入路由设置默认页面。4、鼠标点击无线设置,进入无线设置页面也就...

深度搜索app下载(深度搜索app下载链接)

深度搜索搜不出是因为:1、有可能是权限受限了,可能你登陆的用户不是管理的帐号,因此也就没有搜索功能权限,等于就是权限受到限制了。2、有可能搜索服务关闭的原因,出现这种情况一般是由于使用了优化软件造成的...