一、先来聊一聊迁移的思路,不管是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
 
 
 
 
 

最新文章

  1. 在linux 服务器上用.htaccess文件实现二级域名访问子目录
  2. beaglebone_black_学习笔记——(9)UART使用
  3. Java注解Annotation学习
  4. ios新特性
  5. Linq to Sql 左连接查询
  6. ASP:GB2312格式文本文件转换成UTF-8格式
  7. centos7搭建SVN+Apache+IF.svnadmin实现web管理SVN
  8. Ocelot中文文档-委托处理程序
  9. range与enumerate的区别
  10. ATR102E Stop. Otherwise... [容斥]
  11. php5.6安装Zend Opcache扩展
  12. [OpenCV] Samples 14: kalman filter
  13. 第二周java学习收获
  14. HDU1815(二分+2-SAT)
  15. 第十一周(11.24-12.01)----WBS功能分解
  16. SpringCloud stream连接RabbitMQ收发信息
  17. C#基础复习(2) 之 装箱拆箱
  18. 使用 python 将 "\r\n" 转换为 "\n"
  19. 将Oracle数据库转换为SQL Server
  20. Jquery Json解析

热门文章

  1. windows快捷键记录
  2. Python学习课程零基础学Python
  3. Elementui_day01,基础
  4. Python之一、#!/usr/bin/python到底是什么意思
  5. Page Object设计模式(二)——poium测试库
  6. 程序员:我终于知道post和get的区别
  7. 论文阅读笔记(十四)【AAAI2020】:Appearance and Motion Enhancement for Video-based Person Re-identification
  8. 什么是json? 什么是xml?JSON与XML的区别比较
  9. Cassandra学习&命令行实践
  10. 886. 求组合数 II(模板)