批量遷移Gitee倉庫到Github

2021-10-03 20:14:49 字數 3489 閱讀 7940

title: 「批量遷移gitee倉庫到github」

date: 2019-12-06

description: 「批量遷移gitee倉庫到github」

tags: [「git」,「github」,「gitee」,「遷移倉庫」]

categories: [「運維」]

雖然gitee倉庫蓬勃發展,趨勢很好,但是客觀來講,和github的易用性還是有一定差距的。

當初由於github私有倉庫數量的限制,所以把很多私有的小專案的倉庫都放到了gitee。

最近隨著github的免費倉庫不再限制數量,所以把私有倉庫和公有倉庫都挪到一起放到github挪上了日程。

由於建的倉庫有些多,所以手動逐個挪比較費時間,而且學習一下github的api操作,對以後的工作可能會有幫助,所以我採取了指令碼的方式完成這個事情。

下面分享我做這個事情的幾個步驟。

獲取專案列表

轉殖github建立專案api

上傳歸檔

沒有找到gitee的api,所以採取手動瀏覽器解析網頁的方式獲得倉庫列表,這裡主要獲得了倉庫名和倉庫的描述。

l=

$.each($

("#search-projects-ulist div.list-warpper"),

function

(i,v)

; l.

push

(j);

})

其中除了l=,需要手動翻頁,每次翻頁都要執行一次。

得到的l是所有專案列表。

json

.stringfy

(l);

輸出所有。

import json

j=json.loads(s)l=[

]for i,v in

enumerate

(j):

)

[,

]

這裡使用python呼叫linux 下 git客戶端完成

for i,v in

enumerate

(l):

os.system(f"git clone [email protected]:.git "

)

這裡採用了pygithub庫。

$ pip install pygithub
需要設定github的token,申請token參看

from github import github

g = github(

"0a25fe745*********************xx"

)# token

user=g.get_user(

)hub_repos=

repoddl=

[repo for repo in user.get_repos()]

reponames=

[repo.name for repo in repoddl]

# 當前已有的專案列表

for i,v in

enumerate

(l):

print

(v)if v[

"name"

]in reponames:

# 如果重名,則跳過

print

("exists"

)else

: des=re.sub(

"[\n\t\b]",""

,v["des"])

"name"

],description=des,private=

true))

# 建立,並設定許可權為私有

print

("created"

)

先建立乙個所有repo的字典。

repod=

for repo in user.get_repos():

repod[repo.name]

=repo

for i,repo in

enumerate

(l):

cmd=f" pushd && git remote add gh && git push gh master && popd "

print

(cmd)

os.system(f"bash -xc '' 1>> log.txt 2>>log.txt"

)print

(f" done"

)

上傳中會出現一些專案未能成功push。

用下面的方法補漏。

for i,repo in

enumerate

(l):

cmd=f" pushd && git push gh master && popd "

print

(cmd)

os.system(f"bash -xc '' 1>> log.txt 2>>log.txt"

)print

(f" done"

)

由於遷移的專案均為老舊專案,因此對其進行歸檔操作。

由於pygithub未找到對專案歸檔的功能,所以使用github的官方api進行操作。

)# 使用了http基本認證

)try

:if req.json()[

"archived"]==

true

:print

(f" success"

)except

:print

(f" fail"

)for v in l:

archieve(v[

"name"

])注意使用了httpbasicauth,需要把**中的使用者名稱和token進行替換。

作者: m2kar

郵箱: m2kar.cn#gmail.com

主頁: m2kar.cn

csdn: m2kar的專欄

gogs倉庫遷移,git倉庫遷移

git伺服器上的目錄和本地.git目錄不一樣,是git bare型別,是禁止直接修改的。當需要從一台git伺服器上遷移git專案到另一天git伺服器上時 可以git clone bare url,將專案轉殖下來,也可以通過直接拷貝git伺服器中的git目錄,作用是一樣的。例子 git clone b...

git倉庫遷移

由於新建了乙個gitlab,要將舊的git倉庫遷移到gitlab上.這裡提供乙個最簡單的方法 先檢視remote的名字 git branch r 假設你的remote是origin,用git remote set url 更換位址 git remote set url origin remote g...

git倉庫遷移

比如說原本託管在github上面的 需要遷移到公司內部伺服器上,並且想要儲存原來的commit記錄。操作步驟如下 1.從原來的位址clone乙份裸版本 git clone bare ssh位址 例如 git clone bare git 解釋 bare 建立的轉殖版本庫都不包含工作區,直接就是版本庫...