一、先来聊一聊迁移的思路,不管是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('\n'):
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
 
 
 
 
 

gogs迁移至gitlab的更多相关文章

  1. 如何从GitHub迁移到GitLab?

    如何从GitHub迁移到GitLab? 在本文中,我们将解释如何从Github迁移到Gitlab,同时我们也将解释如何将Github的开源项目导入到Gitlab. 正如你可能非常清楚的那样, Gitl ...

  2. gitHub 迁移到gitlab上

    GitHub 迁移到 GitLab 上 第一步在github上生成 token 地址 https://blog.csdn.net/u014175572/article/details/55510825 ...

  3. github仓库迁移到gitlab以及gitlab仓库迁移到另一个gitlab服务器

    一. github仓库迁移到gitlab 先进入 new project: 选择 Import project, 选择下面的github: 进入后,这里需要github的 personal acces ...

  4. SVN迁移到Gitlab实践经历

    svn 迁移至git操作手册 项目交付.版本管理工具变更等情况下,迁移svn旧历史记录有很大必要,方便后续追踪文件的提交历史,文件修改记录比对等.git自带了从svn迁移至git的工具命令,可很好的对 ...

  5. centos 6.5 gogs迁移外部仓库报错

    安装gogs git软件后,使用迁移外部仓库功能,提示“你没有获得导入本地仓库的权限”,发现是因为使用的ssh的链接进行导入 目前gogs咱不支持,随后使用github的https链接导入,依然报错 ...

  6. gogs迁移

    windows->linux 之前gogs放在windows server2016中,需要迁移至linux docker中. 首先拉取gogs镜像 docker pull gogs/gogs 然 ...

  7. svn项目迁移至gitlab

    关于svn项目迁移有人可能会说,新建一个git项目,把原来的代码直接扔进去提交不完了吗.恩,是的,没错.但是为了保留之前的历史提交记录,还是得做下面的步骤 首先确保本地正常安装配置好git,具体步骤不 ...

  8. 如何把git仓库(包含所有提交历史)迁移到gitlab

    在gitlab上new 一个project 跳转到本地的git 目录中,运行命令 git remote add gitlab gitlab_new_project_address -最后运行如下命令, ...

  9. 通过Shell脚本将VSS项目批量创建并且提交迁移至Gitlab

    脚本运行环境:Git Bash 系统环境:Windows 10 Pro 1709 VSS版本:Microsoft Visual SourceSafe 2005 我的VSS工作目录结构如下: D:\wo ...

随机推荐

  1. Python学习零基础<入门必学>

    1. 注释注释 是任何存在于 # 号右侧的文字,其主要用作写给程序读者看的笔记. 2. 字面常量一个字面常量(Literal Constants)的例子是诸如 5.1.23 这样的数字,或者是如 这是 ...

  2. web自动化之三大等待

    这个假期有些长,长到忘记了要学习,要找工作,好吧,在我每天无休止的追着偶像剧时,我确实没有负罪感,在听了小祥大佬的分享后,我连睡午觉都被吓醒.大佬跟我同一个班,在大厂工作,每天还抽时间学习,作业也没落 ...

  3. textarea输入文字限制个数

    说明: w-count固定为数字部分的class textarea-active为超出最大输入文字个数报错信息的class html 部分: <div class="wrap wrap ...

  4. 浅谈background的用法

    div css 背景样式background属性 一.语法及参数 1.语法:background : background-color(颜色) || background-image(图片地址) || ...

  5. JavaScript使用MQTT

    1.MQTT Server使用EMQTTD开源库,自行安装配置: 2.JS使用Websocket连接通信. 3.JS的MQTT库为paho-mqtt,git地址:https://github.com/ ...

  6. PostgreSQL内核学习笔记四(SQL引擎)

    PostgreSQL实现了SQL Standard2011的大部分内容,SQL处理是数据库中非常复杂的一部分内容. 本文简要介绍了SQL处理的相关内容. 简要介绍 SQL文的处理分为以下几个部分: P ...

  7. django-分页(非海量数据)

    views.py class AnalysisDataHandler(View): def get(self, request): analysis_data = MonitorCenterDataA ...

  8. 一台服务器搭建部署两个或多个Redis实例

    问题描述: 今天程序那边说测试服里面有两个项目,为了数据不冲突,想一台服务器搞两个Redis实例, 然后自己这边查询了一下,确实可以这么整,只需要区分端口号和区分配置文件方面就行, 原理与nginx和 ...

  9. 剑指offer-面试题35-复杂链表的复制-链表

    /* 题目: 实现一个函数,复制复杂链表,返回复制链表的头节点. */ /* 思路: 第一步,复制一个链表S‘,插在原链表S中. 第二步,链表S’复制链表S的random指针. 第三步:拆分链表S和S ...

  10. mybatis中用到的9种设计模式

    1.Builder模式:例如SqlSessionFactoryBuilder.XMLConfigBuilder.XMLMapperBuilder.XMLStatementBuilder.CacheBu ...