python批量獲取gitlab里面所有項目的代碼


背景
現在越來越多的公司采用gitlab來管理代碼。gitlab有個問題,免費版不支持全局代碼搜索,這很麻煩。如果把代碼全部clone到本地就可以方便的進行各種搜索了。可是gitlab也不提供git clone所有項目的功能。

公司越來越大,項目越來越多,怎么辦呢?自己寫個腳本來批量的git clone吧。

思路
gitlab有提供api來獲取projecct列表,那么就可以遍歷這個列表來做git clone

參見:https://docs.gitlab.com/ee/api/projects.html#list-all-projects

腳本
注意:gitlab的api每次最多只能獲取100個projecct的信息。我提供的這個腳本帶翻頁功能,可以支持100個以上的項目。

# -*- coding: UTF-8 -*-
 
# 在Python3.0測試通過
# 需要在gitlab里面新建一個AccessToken填入gitlabToken
 
import sys
if sys.version_info < (3, 0):
    import urllib
else:
    from urllib.request import urlopen
 
import json
import subprocess, shlex
import time
import os
 
gitlabAddr  = '201.1.2.115:8099'         #git的地址
gitlabToken = 'Nzyg92-123456aa4ay__y'    #gitlab的token,在gitlab的設置里有生產臨時token
 
for index in range(10):
    url     = "http://%s/api/v4/projects?private_token=%s&per_page=100&page=%d&order_by=name" % (gitlabAddr, gitlabToken, index)
    print(url)
    
    if sys.version_info < (3, 0):
        allProjects     = urllib.urlopen(url)
    else:
        allProjects     = urlopen(url)
        
    allProjectsDict = json.loads(allProjects.read().decode(encoding='UTF-8'))
    if len(allProjectsDict) == 0:
        break
    for thisProject in allProjectsDict: 
        try:
            thisProjectURL  = thisProject['http_url_to_repo']
            thisProjectPath = thisProject['path_with_namespace']
            print(thisProjectURL + ' ' + thisProjectPath)
            
            if os.path.exists(thisProjectPath):
                command     = shlex.split('git -C "%s" pull' % (thisProjectPath))
            else:
                command     = shlex.split('git clone %s %s' % (thisProjectURL, thisProjectPath))
            
            resultCode  = subprocess.Popen(command)
            time.sleep(0.5)
        except Exception as e:
            print("Error on %s: %s" % (thisProjectURL, e.strerror))

腳本使用方法
這是一個python腳本,可以另存為pull.py。然后電腦上安裝一下python。再寫個批處理文件updategit.bat包含一條命令:python pull.py(即在bat文件中執行上面的python腳本)。

1、在執行前先填寫好token,token的生成方法是

 

將上面的頁面中生成的token寫到gitlabToken = 'Nzyg92-123456aa4ay__y'里。

2、gitlabAddr,填寫你自己的gitlab地址

3、執行python pull.py

執行過程中會

第一次使用的時候有可能會彈框要求輸入gitlab的賬號密碼。

我操作的時候彈出的是:

彈出這個對話框

然后命令行中提醒輸入git賬號及密碼的。

這樣每個項目被遍歷下載下來。完成。


轉自:https://blog.csdn.net/wwwsq/article/details/97106096


免責聲明!

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



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