码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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

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

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

  • 相关阅读:
    【FLASH存储器系列六】SPI NOR FLASH芯片使用指导之二
    python借助wxFormBuilder工具搭建基础的GUI界面—wxFormBuilder工具使用介绍
    代码随想录算法训练营第二天 | 242. 有效的字母异位词、349. 两个数组的交集、1. 两数之和
    Intel芯片的Mac电脑需注意,新型恶意软件能窃取系统中的各类密码
    树莓派基金会近日发布了新版基于 Debian 的树莓派操作系统
    PHP使用Laravel框架编程实现问卷调查系统并且实现批量删除功能(1+X Web前端开发中级 例题)
    移动端页面秒开优化总结
    Git常见场景命令总结
    利器 | TestNG 与 Junit 对比,测试框架如何选择?
    .Net6 Api Swagger配置
  • 原文地址:https://www.cnblogs.com/xxcbdhxx/p/how-to-migrate-git-repository-with-command-line.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号