Як клонувати відразу всі репозиторії з GitHub?


97

У мене є обліковий запис компанії GitHub, і я хочу створити резервні копії всіх сховищ всередині, облік будь-якого нового, що може бути створене для автоматизації. Я сподівався на щось подібне:

git clone git@github.com:company/*.git 

або подібні будуть працювати, але там, схоже, не сподобається узагальнюючий знак.

Чи є в Git спосіб клонувати та потім витягувати все, якщо припускати, що у кожного є відповідні дозволи?


2
Гарне питання. А як щодо того, щоб підтримувати їх синхронізовано через "pull"? Чи працює яка-небудь з відповідей для тягнень?
nealmcb

Нам потрібне рішення python для тих, хто з нас не так вмілий у вузлі чи рубіні;) Або github повинен прочитати це і змилуватися над нами та просто надати простий веб-інтерфейс для цього ....
nealmcb

Відповіді:


52

Я не думаю, що це можливо зробити так. Найкраще - знайти та прокрутити список сховищ Організації за допомогою API.

Спробуйте це:

  • Створіть маркер API, перейшовши в Налаштування облікового запису -> Програми
  • Зателефонуйте: http://${GITHUB_BASE_URL}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN}
  • Відповіддю буде масив об'єктів JSON. Кожен об’єкт включатиме інформацію про одне зі сховищ цієї Організації. Я думаю, у вашому випадку ви будете шукати спеціально ssh_urlвласність.
  • Тоді git cloneкожен із цих ssh_urlс.

Це трохи додаткової роботи, але для GitHub необхідно мати належну автентифікацію.


Я створив маркер API і отримую вихідні дані із виклику, але я не бачу нічого, що б посилалося на те, що я знаю про наші сховища або рядок 'ssh_url'. Я підозрюю, що не зробив належну розмову curl -i https://github.com/api/v3/orgs/company/repos?access_token=<token>
numb3rs1x

Це обліковий запис GitHub Enterprise чи github.com?
Томас Келлі

1
Ах, я вас неправильно зрозумів. Я думав, що це обліковий запис Enterprise. Замість того https://github.com/api/v3/, щоб спробувати https://api.github.com/.
Томас Келлі

1
І я не впевнений, як створена ваша конкретна компанія, але якщо це "користувач" замість "організації", тоді ви хочете використовувати /users/${COMPANY}/reposшлях замість /orgs/${COMPANY}/repos.
Томас Келлі

1
За GitHub: Будь ласка, використовуйте замість цього заголовка HTTP-авторизації, оскільки використання access_tokenпараметра запиту застаріле. Якщо цей маркер використовується додатком, над яким ви не маєте контролю, пам’ятайте, що він може припинити роботу внаслідок цієї депресії.
BogeyMan

114

У Windows та всіх системах UNIX / LINUX , використовуючи Git Bash або будь-який інший термінал , замініть YOURUSERNAMEсвоїм ім'ям користувача та використовуйте:

CNTX={users|orgs}; NAME={username|orgname}; PAGE=1
curl "https://api.github.com/$CNTX/$NAME/repos?page=$PAGE&per_page=100" |
  grep -e 'git_url*' |
  cut -d \" -f 4 |
  xargs -L1 git clone
  • Встановіть CNTX=usersта NAME=yourusername, щоб завантажити всі ваші сховища.
  • Установіть CNTX=orgsі NAME=yourorgnameзавантажте всі сховища вашої організації.

Максимальний розмір сторінки - 100, тому вам доведеться зателефонувати на це кілька разів за допомогою потрібного номера сторінки, щоб отримати всі ваші сховища (встановіть PAGEпотрібний номер сторінки, який ви хочете завантажити).

Ось сценарій оболонки, який виконує вище: https://gist.github.com/erdincay/4f1d2e092c50e78ae1ffa39d13fa404e


4
Розчин чистого башу, найпростіший. Для вашої інформації, цей баш-код може бути виконаний майже в будь-якому середовищі * nix, Linux, Cygwin, Mingw і, звичайно, Gitbash, який насправді є термінальною емуляцією, як і інші.
m3nda

1
Це не працює з організаціями, тому це не відповідає безпосередньо на питання. Ця відповідь від Kenorb працює з організаціями і працює також до 1000 репозиторіїв - для мене це працювало краще.
RichVel

1
з автентифікацією: curl " api.github.com/$CNTX/$NAME/… " | grep -e 'git_url *' | cut -d \ "-f 4 | xargs -L1 git clone
Yannick Wurm

2
Будь ласка, оновіть відповідь (лютий-2019): відповідно до API GitHub v3, ваш локон повинен перейти до / orgs / ORGNAME / repos. Також, можливо, включіть посилання на API v3: developer.github.com/v3 Також для приватних репост вам потрібно буде додати curl -u "ім'я користувача", після чого curl запитає вас пароль один раз. Інакше чудово працює!
Дмитро Шевкопляс

1
UPDATE від Димитрія hevkoplyas коментар stackoverflow.com/questions/19576742 / ... . developer.github.com/v3 повертає статус 301 при спробі скрутитись. використовувати цю команду bash curl -u "{username}" " api.github.com/orgs {org} / repos? page = 1 & per_page = 100" | grep -o 'git @ [^ "] *' | xargs -L1 клон git працює 100%
Томмі

43

Сховища організації

Щоб клонувати всі репозиторії з вашої організації, спробуйте такий одношаровий вкладиш:

GHORG=company; curl "https://api.github.com/orgs/$GHORG/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone

Репозиторії користувачів

Клонування всіх, що використовують URL-адреси сховища Git:

GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -o 'git@[^"]*' | xargs -L1 git clone

Клонування всіх за допомогою URL-адреси клонування:

GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git' | xargs -L1 git clone

Ось корисна функція оболонки, яку можна додати до завантажувальних файлів користувача (за допомогою curl+ jq):

# Usage: gh-clone-user (user)
gh-clone-user() {
  curl -sL "https://api.github.com/users/$1/repos?per_page=1000" | jq -r '.[]|.clone_url' | xargs -L1 git clone
}

Приватні сховища

Якщо вам потрібно клонувати приватні репозиторії, ви можете додати маркер авторизації в заголовок, наприклад:

-H 'Authorization: token <token>'

або передайте його в param ( ?access_token=TOKEN), наприклад:

curl -s "https://api.github.com/users/$GHUSER/repos?access_token=$GITHUB_API_TOKEN&per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git' | xargs -L1 git clone

Примітки:

  • Щоб отримати лише приватні сховища, додайте type=privateу рядок запитів.
  • Інший спосіб - використовувати hubпісля налаштування ключа API.

Дивитися також:


Підказки :
- Щоб збільшити швидкість, встановіть кількість паралельних процесів, вказавши -Pпараметр для xargs( -P4= 4 процеси).
- Якщо вам потрібно підвищити обмеження GitHub, спробуйте автентифікацію, вказавши свій ключ API.
- Додати --recursiveдля повторного запису в зареєстровані підмодулі та оновлення будь-яких вкладених підмодулів у межах.


2
per_page = 1000 макс на 100
aehlke

20

Цей суть виконує завдання в одному рядку командного рядка:

curl -s https://api.github.com/orgs/[your_org]/repos?per_page=200 | ruby -rubygems -e 'require "json"; JSON.load(STDIN.read).each { |repo| %x[git clone #{repo["ssh_url"]} ]}'

Замініть [your_org]на назву вашої організації. І встановіть свій, per_pageякщо потрібно.

ОНОВЛЕННЯ:

Як згадував ATutorMe, згідно з документами GitHub , максимальний розмір сторінки становить 100 .

Якщо у вас більше 100 репозиторіїв, вам доведеться додати pageпараметр до своєї URL-адреси, і ви можете запустити команду для кожної сторінки.

curl -s "https://api.github.com/orgs/[your_org]/repos?page=2&per_page=100" | ruby -rubygems -e 'require "json"; JSON.load(STDIN.read).each { |repo| %x[git clone #{repo["ssh_url"]} ]}'

Примітка: Параметр за замовчуванням per_page- 30.


Будь-яка ідея, як це робиться для приватних репо, до яких ви маєте доступ?
MichaelGofron

другий не працює, тому що амперсанд змушує перейти до фонового завдання
slashdottir

Я додав & access_token = <my_access_token> до URL-адреси, і це спрацювало чудово
rmartinus

2-а: сторінка = 1 (!)
Янік Вурм

5

Перейдіть у Налаштування облікового запису -> Застосуйте програму та створіть ключ API.
Потім вставте ключ API, URL-адресу екземпляра github та назву організації в нижченаведений сценарій

#!/bin/bash

# Substitute variables here
ORG_NAME="<ORG NAME>"
ACCESS_TOKEN="<API KEY>"
GITHUB_INSTANCE="<GITHUB INSTANCE>

URL="https://${GITHUB_INSTANCE}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN}"

curl ${URL} | ruby -rjson -e 'JSON.load(STDIN.read).each {|repo| %x[git clone #{repo["ssh_url"]} ]}'

Збережіть це у файлі, chmod u+xфайл, а потім запустіть його.

Дякую Арно за рубіновий код.


5

Отже, я теж додам свою відповідь. :) (я знайшов це просто)

Список отримання (я використовував компанію "magento"):

curl -si https://api.github.com/users/magento/repos | grep ssh_url | cut -d '"' -f4

Використовуйте clone_urlзамість ssh_urlдоступу використовувати HTTP.

Отже, давайте клонувати їх усіх! :)

curl -si https://api.github.com/users/magento/repos | \
    grep ssh_url | cut -d '"' -f4 | xargs -i git clone {}

Якщо ви збираєтеся отримати приватні репо, просто додайте параметр GET ?access_token=YOURTOKEN


1
Так, не потрібен рубін, просто щіпка ...
Сяо-Фен Лі

4

Я знайшов коментар у повідомленні @seancdavis, який був дуже корисним, особливо тому, що як оригінальний плакат, я хотів синхронізувати всі репозиторії для швидкого доступу, проте переважна більшість з них були приватними.

curl -u [[USERNAME]] -s https://api.github.com/orgs/[[ORGANIZATION]]/repos?per_page=200 |
  ruby -rubygems -e 'require "json"; JSON.load(STDIN.read).each { |repo| %x[git clone #{repo["ssh_url"]} ]}'

Замініть [[USERNAME]] своїм іменем користувача github, а [[ORGANIZATION]] своєю організацією Github. Вихідні дані (метадані репозиторію JSON) будуть передані простому рубіновому скрипту:

# bring in the Ruby json library
require "json"

# read from STDIN, parse into ruby Hash and iterate over each repo
JSON.load(STDIN.read).each do |repo|
  # run a system command (re: "%x") of the style "git clone <ssh_url>"
  %x[git clone #{repo["ssh_url"]} ]
end

1
Це рішення для мене прекрасно працювало. Насправді все, що мені було потрібно, було клонувати всі репортажі особистого рахунку на мою нову локальну машину. Дуже зручно для встановлення нової робочої станції. Примітка: для цього мені довелося перейти .../orgs/[[organization]]/repos...на .../users/[[username]]/repos.... Тепер я можу швидко імпортувати всю свою роботу на різні локальні машини. ДЯКУЮ!
Б. Булпетт


2

Цей пітон-однокласник зробить те, що вам потрібно. Це:

  • перевіряє github на наявність доступних репозиторіїв
  • для кожного робить системний виклик git clone

    python -c "import json, urllib, os; [os.system('git clone ' + r['ssh_url']) for r in json.load(urllib.urlopen('https://api.github.com/orgs/<<ORG_NAME>>/repos?per_page=200'))]"
    

2
curl -s https://api.github.com/orgs/[GITHUBORG_NAME]/repos | grep clone_url | awk -F '":' '{ print $2 }' | sed 's/\"//g' | sed 's/,//' | while read line; do git clone "$line"; done

2
Будь ласка, додайте пояснення до свого рішення. Таким чином інші люди з подібними проблемами зможуть легше зрозуміти ваше рішення!
Nander Speerstra,

Докладно, це номер прохідної сторінки, як ?page=2.
Бруно Вего,

2

Просте рішення:

NUM_REPOS=1000
DW_FOLDER="Github_${NUM_REPOS}_repos"
mkdir ${DW_FOLDER}
cd ${DW_FOLDER}
for REPO in $(curl https://api.github.com/users/${GITHUB_USER}/repos?per_page=${NUM_REPOS} | awk '/ssh_url/{print $2}' | sed 's/^"//g' | sed 's/",$//g') ; do git clone ${REPO} ; done

2

Я спробував кілька команд та інструментів вище, але вирішив, що це занадто багато клопоту, тому я написав інший інструмент командного рядка для цього, званий github-dl.

Щоб використовувати його (якщо у вас встановлено nodejs)

npx github-dl -d /tmp/test wires

Це отримає список усіх репо-репортажів wiresі записує інформацію в testкаталог, використовуючи дані авторизації (користувач / пропуск), які ви надаєте в CLI.

Докладно, це

  1. Запитує для auth (підтримує 2FA)
  2. Отримує список репост для користувача / org через API Github
  3. Чи є пагинація для цього, тому підтримується більше 100 репо

Він фактично не клонує репост, але замість цього записує .txtфайл, який ви можете перейти, xargsщоб зробити клонування, наприклад:

cd /tmp/test
cat wires-repo-urls.txt | xargs -n2 git clone

# or to pull
cat /tmp/test/wires-repo-urls.txt | xargs -n2 git pull

Можливо, це вам корисно; це лише кілька рядків JS, тому слід легко підлаштовуватися під ваші потреби


1

Для цього також є дуже корисний модуль npm . Він може не лише клонуватись, але й витягувати (оновлювати вже наявні дані).

Ви просто створите конфігурацію так:

[{
   "username": "BoyCook",
   "dir": "/Users/boycook/code/boycook",
   "protocol": "ssh"
}]

і робити gitall cloneнаприклад. Абоgitall pull


1

Якщо хтось шукає рішення для Windows, ось невелика функція в PowerShell, щоб зробити трюк (це може бути один рядок / псевдонім, якщо не факт, що він мені потрібен для роботи як з проксі, так і без нього).

function Unj-GitCloneAllBy($User, $Proxy = $null) {
    (curl -Proxy $Proxy "https://api.github.com/users/$User/repos?page=1&per_page=100").Content 
      | ConvertFrom-Json 
      | %{ $_.clone_url } 
      # workaround git printing to stderr by @wekempf aka William Kempf
      # https://github.com/dahlbyk/posh-git/issues/109#issuecomment-21638678
      | %{ & git clone $_ 2>&1 } 
      | % { $_.ToString() }
}

1

Таким чином, на практиці, якщо ви хочете клонувати всі репости з організації, FOOяка відповідає BAR, ви можете скористатись одностроєм нижче, який вимагає jq та загальних утилітів cli

curl 'https://api.github.com/orgs/FOO/repos?access_token=SECRET' |
  jq '.[] |
  .ssh_url' |
  awk '/BAR/ {print "git clone " $0 " & "}' |
  sh

1

Ще один сценарій оболонки з коментарями, який клонує всі сховища (загальнодоступні та приватні) від користувача:

#!/bin/bash

USERNAME=INSERT_USERNAME_HERE
PASSWORD=INSERT_PASSWORD_HERE

# Generate auth header
AUTH=$(echo -n $USERNAME:$PASSWORD | base64)

# Get repository URLs
curl -iH "Authorization: Basic "$AUTH https://api.github.com/user/repos | grep -w clone_url > repos.txt

# Clean URLs (remove " and ,) and print only the second column
cat repos.txt | tr -d \"\, | awk '{print $2}'  > repos_clean.txt

# Insert username:password after protocol:// to generate clone URLs
cat repos_clean.txt |  sed "s/:\/\/git/:\/\/$USERNAME\:$PASSWORD\@git/g" > repos_clone.txt

while read FILE; do
    git clone $FILE
done <repos_clone.txt

rm repos.txt & rm repos_clone.txt

1

Створіть баш-псевдонім / func у своєму ~/.bashrc file

Я вирішив це для своєї команди, створивши псевдонім / bash func у своєму ~/.bashrc file

кроки

відкрийте термінал або оболонку Linux і відкрийте ~/.bashrc file:

sudo nano ~/.bashrc

додати цю функцію:

CloneAll() {
    # Make the url to the input github organization's repository page.
    ORG_URL="https://api.github.com/orgs/${1}/repos?per_page=200";

    # List of all repositories of that organization (seperated by newline-eol).
    ALL_REPOS=$(curl -s ${ORG_URL} | grep html_url | awk 'NR%2 == 0' \
                | cut -d ':' -f 2-3 | tr -d '",');

    # Clone all the repositories.
    for ORG_REPO in ${ALL_REPOS}; do
        git clone ${ORG_REPO}.git;
    done
}

збережіть і закрийте ваш ~ / .bashrc фліш, а потім закрийте термінал - вам потрібно зробити це або ініціалізувати новий функцію:

відкрийте новий термінал і спробуйте:

CloneAll <your_github_org_name>

приклад : якщо ваша особиста URL-адреса репозиторію github називається https://github.com/awesome-async, команда буде

CloneAll awesome-async

Важливо

per_page=200в кінці першої змінної ORG_URLзадає число операцій РЕПО , які будуть клоновані, тому зверніть особливу увагу , що:

ORG_URL="https://api.github.com/orgs/${1}/repos?per_page=200";  <---- make sure this is what you want

Сподіваюся, це допомагає! :)


Здається макс. значення per_page - 100 ... для великих оргів додано номер сторінки як 2-й параметр, і він ідеально підходить для моїх потреб...repos?page=${2}&per_page=100";
sv3n

0

Ви можете отримати список сховищ, скориставшись, curlа потім повторити цей список за допомогою циклу bash:

GIT_REPOS=`curl -s curl https://${GITHUB_BASE_URL}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN} | grep ssh_url | awk -F': ' '{print $2}' | sed -e 's/",//g' | sed -e 's/"//g'`
for REPO in $GIT_REPOS; do
  git clone $REPO
done

0

Ви можете скористатися інструментом з відкритим кодом, щоб клонувати купу репозиторіїв github: https://github.com/artiomn/git_cloner

Приклад:

git_cloner --type github --owner octocat --login user --password user https://my_bitbucket

Використовуйте JSON API від api.github.com. Приклад коду можна побачити в документації на github: https://developer.github.com/v3/

Або там:

https://github.com/artiomn/git_cloner/blob/master/src/git_cloner/github.py


0

Щоб клонувати лише приватні репозитори, надаючи ключ доступу та заданий python 3 та встановлений модуль запитів:

ORG=company; ACCESS_KEY=0000000000000000000000000000000000000000; for i in $(python -c "import requests; print(' '.join([x['ssh_url'] for x in list(filter(lambda x: x['private'] ,requests.get('https://api.github.com/orgs/$ORG/repos?per_page=1000&access_token=$ACCESS_KEY').json()))]))"); do git clone $i; done;

0

Рішення Python3, яке включає вичерпні сторінки з використанням сторінки Link.

Попередні реквізити:


import json
import requests
from requests.auth import HTTPBasicAuth
import links_from_header

respget = lambda url: requests.get(url, auth=HTTPBasicAuth('githubusername', 'githubtoken'))

myorgname = 'abc'
nexturl = f"https://api.github.com/orgs/{myorgname}/repos?per_page=100"

while nexturl:
    print(nexturl)
    resp = respget(nexturl)

    linkheads = resp.headers.get('Link', None)
    if linkheads:
        linkheads_parsed = links_from_header.extract(linkheads)
        nexturl = linkheads_parsed.get('next', None)
    else:
        nexturl = None

    respcon = json.loads(resp.content)
    with open('repolist', 'a') as fh:
        fh.writelines([f'{respconi["full_name"]}\n' for respconi in respcon])

Потім, ви можете використовувати xargsабо паралельно , а також :cat repolist | parallel -I% hub clone %


0

Якщо у вас є список сховищ у такому списку, то цей скрипт оболонки працює:

user="https://github.com/user/"

declare -a arr=("repo1", "repo2")

for i in "${arr[@]}"

do

   echo $user"$i"

   git clone $user"$i"

done 

якщо є деякі приватні сховища, ви можете оновити "user" таким чином: user = " user: password@github.com/user "
Med Ali Difallah

0

Я створив зразок пакетного сценарію. Ви можете завантажити всі приватні / загальнодоступні сховища з github.com. Після завантаження сховища воно автоматично перетворюється на zip-файл.

@echo off
setlocal EnableDelayedExpansion
SET "username=olyanren"
SET "password=G....."
set "mypath=%cd%\"
SET "url=https://%username%:%password%@github.com/%username%/"
FOR /F "tokens=* delims=" %%i in (files.txt) do (
SET repo=%%i
rmdir /s /q !repo!
git clone "!url!!repo!.git"
cd !repo!
echo !mypath!
git archive --format=zip -o "!mypath!!repo!.zip" HEAD
cd ..
)

Примітка: файл files.txt повинен містити лише імена сховищ, такі як:

repository1
repository2

0

Оновлення від 19 травня

використовувати цю команду bash для організації (включено приватне репо)

curl -u "{username}" "https://api.github.com/orgs/{org}/repos?page=1&per_page=100" | grep -o 'git@[^"]*' | xargs -L1 git clone

0

Переважаючі відповіді тут не враховують, що Github API поверне максимум 100 сховищ, незважаючи на те, що ви можете вказати в per_page. Якщо ви клонуєте організацію Github з більш ніж 100 репозиторіями, вам доведеться переходити за посиланнями на пейджинг у відповіді API.

Я написав інструмент CLI, щоб зробити саме це :

clone-github-org -o myorg

Це дозволить клонувати всі сховища myorgорганізації в поточну робочу директорію.


0

Для орг, у яких ви маєте доступ до приватних репостів:

curl -u <YOUR_GITHUB_USERNAME> -s https://api.github.com/orgs/<ORG_NAME>/repos?per_page=200 | ruby -rubygems -e ’require “json”; JSON.load(STDIN.read).each { |repo| %x[git clone #{repo[“html_url”]} ]}'

Він використовує html_url, тому вам не потрібно access_tokenпросто ввести пароль github, коли з'явиться запит.


Базова автентифікація за допомогою пароля до API застаріла і незабаром більше не працюватиме. Відвідайте [deprecating-password-auth] ( developer.github.com/changes/… ), щоб отримати додаткову інформацію про запропоновані обхідні шляхи та дати видалення.
BogeyMan

@BogeyMan дякую за оновлення!
Флавіо

0

Клонуйте всі свої репозиторії, що не є форками:

curl -u "username" https://api.github.com/user/repos\?page\=1\&per_page\=100 |
  jq -r 'map(select(.fork == false)) | .[] | .ssh_url' |
  xargs -L1 git clone

Клонуйте свої сутності:

curl https://api.github.com/users/username/gists\?page\=1\&per_page\=100 |
   jq -r ".[] | .git_pull_url +\" '\" + (.files|keys|join(\"__\") + \"'\")" |
   xargs -L1 git clone

Ця jqкоманда є складною, оскільки ім'я репозиторію gists є хешами, так що команда об'єднує всі імена файлів як ім'я репо


Ви можете відфільтрувати JSON довільно, використовуючи jq

встановити: sudo apt-get install jq

У наведеному вище прикладі я відфільтрував форки, використовуючи це: curl ... | jq -r 'map(select(.fork == false))' ...- корисно для не клонування репозиторіїв, де ви робили випадкові запити на витяг

jq підтримує деякі дуже розширені функції. man jqваш друг


Ви можете пройти автентифікацію, curl -u "username" ... щоб отримати доступ до приватних репостів


URL-адреси API Guthub

  • Ваші репозиторії (потрібна автентифікація): https://api.github.com/user/repos\?page\=1\&per_page\=100
  • Будь-який користувач: https://api.github.com/users/other_username/repos\?page\=1\&per_page\=100
  • Організації: https://api.github.com/orgs/orgname/repos\?page\=1\&per_page\=100

Документи API Github для репозиторіїв


0
"""
Clone all public Github Repos

https://developer.github.com/v3/repos/#list-repositories-for-a-user
"""

import urllib.request, base64
import json
import os


def get_urls(username):
    url = f"https://api.github.com/users/{username}/repos?per_page=200"
    request = urllib.request.Request(url)
    result = urllib.request.urlopen(request)
    return json.load(result)


if __name__ == "__main__":
    for r in get_urls("MartinThoma"):
        if not os.path.isdir(r["name"]):
            print(f"Clone {r['name']}...")
            os.system("git clone " + r["ssh_url"])
        else:
            print(f"SKIP {r['name']}...")

0

Щоб клонувати всі власні приватні та публічні репозиторії, просто згенеруйте новий маркер доступу із доступом до репозиторіїв і використовуйте це:

(замінити на власний маркер доступу та ім’я користувача)

for line in $(curl https://api.github.com/user/repos?access_token=ACCESS_TOKEN_HERE  | grep -o "git@github.com:YOUR_USER_NAME/[^ ,\"]\+");do git clone $line;done

Це дозволить клонувати всі репозиції в поточній папці

Це невелика програма bash, ви можете просто вставити її в термінал і натиснути клавішу Enter

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.