скрипт python для клонирования всех репозиториев кода из организации кода github

#python #github #automation #clone #git-clone

Вопрос:

Существует множество способов клонирования репозиториев кода GitHub из организации. Теперь, учитывая, что существуют некоторые репозитории, которые являются частными и общедоступными, я искал решение, в котором автоматизированный скрипт или логика кода решали бы мою цель клонирования репозиториев кода независимо от типа репозитория. Я пробовал различные меры, но не смог найти простое автоматизированное решение. Я попытался использовать команду curl, но это было медленно, так как плотность клонируемых репозиториев кода превышала 200 репозиториев кода.

Ответ №1:

Можете ли вы попробовать ниже фрагмент кода python, чтобы клонировать все репозитории:

Здесь мы используем git ssh для клонирования каждого репозитория безопасным способом для размещения как публичного, так и частного кода.

Иногда из-за проблем с сетью он может отображать сообщения об удаленном зависании/потере пакетов , что приводит к частичному/отсутствию клонирования репо. чтобы избежать этого, пожалуйста, установите в оболочке параметр ниже.

 git config --global http.postBuffer 157286400
 

Предполагая, что ваши глобальные учетные данные git обновлены.

Код :

 import os
# Define your repo list
list = ["repo1","repo2"]

#Loop it through repo's list
for repo in list:
    #Clone the each repo using ssh git clone command in most secure way
    cmd = "git clone git@<git ssh url>/{}".format(repo)
    print("Starting to clone {}".format(repo))
    os.system(cmd)
    print("Finshed cloning {}".format(repo))
    print("#####################################")
    print("")
 

Ответ №2:

собрал информацию из двух ресурсов для клонирования частных репозиториев всех организаций:

 # https://www.thepythoncode.com/article/using-github-api-in-python
# https://github.com/libgit2/pygit2/issues/554

# pip3 install PyGithub pygit2

from github import Github
import pygit2

# using an access token
g = Github('TOKEN')
org = g.get_organization('ORG NAME')

callbacks = pygit2.RemoteCallbacks(pygit2.UserPass('TOKEN', 'x-oauth-basic'))
# Clone repo
for repo in org.get_repos():
    pygit2.clone_repository(
        url=repo.clone_url,
        path=f'/home/<Username>/PycharmProjects/Backup/{repo.name}',
        callbacks=callbacks)