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

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM