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
(f" success"
)except
(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 建立的轉殖版本庫都不包含工作區,直接就是版本庫...