背景
現在越來越多的公司采用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