zoukankan      html  css  js  c++  java
  • gogs迁移至gitlab

    一、先来聊一聊迁移的思路,不管是gogs迁移至gitlab,还是gitlab迁移至gogs,亦或gitlab迁移至gitlab,手动迁移的步骤都是如下图所示(在gitlab上新建一个空项目就会有这样的提示),

    1.进入项目的仓库,删除原来的远程地址(在第一步这块我用的命令是git remote rm origin)

    2.新指定新的远程地址

    3.上传所有本地分支至新的远程地址

    4.上传所有tag至新的远程地址

    cd existing_repo
    git remote rm origin
    git remote add origin git@47.100.168.158:zhouyou/zytest.git
    git push -u origin --all
    git push -u origin --tags
    二、所有项目迁移的话,那就必须脚本来实现,实现步骤
    1.获取所有要迁移项目的访问地址
    a.这块我用了一个相对比较耗时的办法(notepad++使用熟练的话十分钟就能搞定),在gogs服务器上获取每个人创建的项目,如下图,在gogs对应的data目录下有所有员工的姓名

    b.然后使用命令tree -L 2(从当前目录向下查看两级目录,没有tree命令的请执行yum install tree -y),如图可以看到每个用户下面的项目,把这些全部复制粘贴到notepad++上(其他文本编辑器也可以),

    c.在文本编辑器上将其整理成如下图格式,访问的地址gogs.haha.local是固定的(每个公司的域名都不一样,也有可能是ip),后面是用户和项目名称组成,都是有规律可循的。红框处前面是用户名后面是密码,脚本clone时会用到(此处需要注意,需要将一个通用的用户添加到所有项目中,如图所示我的gogsamdin用户就在所有项目中)

    d.然后在对图三的数据进行格式调整,调整成python认识的列表数据,如图所示(notepad++都可以快捷实现,看自己对文本编辑器的使用程度)

    2.获取到所有项目的访问地址后,我们需要把所有项目clone至本地的一个目录
    3.克隆完成后,要对每个项目的所有分支进行checkout,因为上传分支的时候只会将本地所存在的分支上传至远程地址,不存在的不上传。clone完成后本地只有一个master分支,需要想办法获取远程所有分支名称然后checkout一遍
    4.checkout完成后,就可以删除旧的源(origin),新增新的源,并把分支和tag上传至新的源
    下面附上脚本,一个是python,一个是shell脚本
    PS:先执行python脚本,脚本执行完成之后再执行shell脚本,shell脚本的存放目录和gog-to-gitlab3是同一级
    gogs_to_gitlab.py
    #coding=utf-8
    # @Time:2019/7/26 16:52
    # @Author:ZHOUYOU
    # from git import Repo
    # import os
    from git import Repo
    import git
    import os
    rep_list  =  ['http://gogsadmin:123456$1@gogs.haha.local/masibin/fec-device','http://gogsadmin:123456$1@gogs.haha.local/masibin/fec-install','http://gogsadmin:123456$1@gogs.haha.local/zhangyan/fec-cms']
    path = 'D:gogs-to-gitlab3'
    for i in rep_list:
        #从列表中获取每个项目的项目名称,并创建对应文件夹
        folder = i.split('/',-1)[4]
        print(folder)
        folder_name = './'+folder
        os.mkdir(path+folder_name)
        Repo.clone_from(url=i,to_path=path+folder_name)
    
        #获取远程分支的分支名称
        repo = git.Repo(path+folder_name)
        remote_branches = []
        for ref in repo.git.branch('-r').split('
    '):
            remote_branches.append(ref)
        print(remote_branches)
        del remote_branches[0]
        print(remote_branches)
    
        #获取分支名称
        bran_name = []
        for bran in remote_branches:
            print(bran.split('/',-1)[1])
            bran_name.append(bran.split('/',-1)[1])
        print(bran_name)
    
        #在本地切换一遍分支,因为在上传至新的gitlab库时,只会把已存在的本地分支上传,没有的不会上传,所以必须把所有分支都切换一遍
        for bran in bran_name:
            repo.git.checkout(bran)
    #!/bin/sh 
    cd gogs-to-gitlab3
    for i in `ls`;
    do 
    echo ======into $i
    cd $i
    git remote rm origin
    git remote add origin http://ip:port/XXXX/$i.git(此处根据自己实际情况填写地址)
    git push -u origin --all
    git push -u origin --tags
    cd ..
    done
     
     
     
     
     
  • 相关阅读:
    NX二次开发-UFUN设置显示状态抑制显示UF_DISP_set_display
    NX二次开发-使用NXOPEN C++向导模板做二次开发
    ANTV/G6 怎么按条件自定义节点颜色(Graphin)
    js数组去重及数组对象去重
    vue组件老胡机抽奖(转载)
    Kafka第二节
    Kafka第一节
    更改idea的database数据库连接的ddl格式
    不推荐别的了,IDEA 自带的数据库工具就很牛逼!
    MongoDB 按照时间段查询某个物理机的CPU使用率,按照时间倒序排序,取出最新的5条数据
  • 原文地址:https://www.cnblogs.com/zy0209/p/11265158.html
Copyright © 2011-2022 走看看