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('\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的更多相关文章
- 如何从GitHub迁移到GitLab?
如何从GitHub迁移到GitLab? 在本文中,我们将解释如何从Github迁移到Gitlab,同时我们也将解释如何将Github的开源项目导入到Gitlab. 正如你可能非常清楚的那样, Gitl ...
- gitHub 迁移到gitlab上
GitHub 迁移到 GitLab 上 第一步在github上生成 token 地址 https://blog.csdn.net/u014175572/article/details/55510825 ...
- github仓库迁移到gitlab以及gitlab仓库迁移到另一个gitlab服务器
一. github仓库迁移到gitlab 先进入 new project: 选择 Import project, 选择下面的github: 进入后,这里需要github的 personal acces ...
- SVN迁移到Gitlab实践经历
svn 迁移至git操作手册 项目交付.版本管理工具变更等情况下,迁移svn旧历史记录有很大必要,方便后续追踪文件的提交历史,文件修改记录比对等.git自带了从svn迁移至git的工具命令,可很好的对 ...
- centos 6.5 gogs迁移外部仓库报错
安装gogs git软件后,使用迁移外部仓库功能,提示“你没有获得导入本地仓库的权限”,发现是因为使用的ssh的链接进行导入 目前gogs咱不支持,随后使用github的https链接导入,依然报错 ...
- gogs迁移
windows->linux 之前gogs放在windows server2016中,需要迁移至linux docker中. 首先拉取gogs镜像 docker pull gogs/gogs 然 ...
- svn项目迁移至gitlab
关于svn项目迁移有人可能会说,新建一个git项目,把原来的代码直接扔进去提交不完了吗.恩,是的,没错.但是为了保留之前的历史提交记录,还是得做下面的步骤 首先确保本地正常安装配置好git,具体步骤不 ...
- 如何把git仓库(包含所有提交历史)迁移到gitlab
在gitlab上new 一个project 跳转到本地的git 目录中,运行命令 git remote add gitlab gitlab_new_project_address -最后运行如下命令, ...
- 通过Shell脚本将VSS项目批量创建并且提交迁移至Gitlab
脚本运行环境:Git Bash 系统环境:Windows 10 Pro 1709 VSS版本:Microsoft Visual SourceSafe 2005 我的VSS工作目录结构如下: D:\wo ...
随机推荐
- Eclipse+ADT+Android SDK搭建安卓开发环境
第一步:打开[Android.rar]压缩包,如图所示[评论区回复我,压缩包地址] 第二步:配置环境变量 (1) 解压[android-sdk_r24.4.1-windows.zip]压缩包 (2) ...
- libmodbus库linux 嵌入式设备中的使用
libmodbus库的交叉编译:1]到libmodbus官网https://libmodbus.org/download/下载安装包,内部自带configure文件,官网推荐v3.1.6稳定版.另外注 ...
- matlab 中 find() 函数用法
一. 功能: 寻找非零元素的索引和值 二.相关函数语法: ind = find(X) ind = find(X, k) ind = find(X, k, 'first') ind = find(X, ...
- QD程序设计比赛游记
-------------------------- 2019/5/31 纪念Wa声一片 ------------------------ 今天确实很神奇的,早晨就去了机房,我们敬爱的syzx总教练( ...
- Jenkins+robotframework持续集成环境(三)
构建job并运行 一.配置job 1.在Jenkins首页的左侧菜单栏,点击新建任务,输入一个任务名称,并选择“构建一个自由风格的软件项目”,点击确定进入配置Job页面. 2.在构建处选择Window ...
- 【python基础语法】第3天作业练习题
''' .将给定字符串的PHP替换为Python best_language = "PHP is the best programming language in the world! &q ...
- cf1242B
题意简述:给出一个n个点的完全图,边权要么是1要么是0,输入只给出权值的是1的那些边,求解最小生成树的权值 解答:边很多,我们考虑使用prim算法,prim算法的过程中维护了一个dis数组,这里我们可 ...
- python 访问sql server数据库
访问数据库 cnxn = pyodbc.connect("Driver={SQL Server};Server=localhost;Database=用户名;uid=sa;pwd=密码&qu ...
- lombok版本过低报错
调试报错Error:java: java.lang.ExceptionInInitializerError com.sun.tools.javac.code.TypeTags JAVA12调整原有项 ...
- 小白的java学习之路 “ 选择结构(二)”
switch 选择结构: 为什么使用switch选择结构: switch选择结构可以更好地解决等值判断问题. switch选择结构的四个关键字: switch case default ...



