#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)