У меня есть корпоративная учетная запись GitHub, и я хочу создать резервную копию всех репозиториев в ней, учитывая все новое, что может быть создано в целях автоматизации. Я надеялся примерно так:
git clone git@github.com:company/*.git
или аналогичный будет работать, но, похоже, ему не нравится подстановочный знак.
Есть ли способ в Git клонировать, а затем извлекать все, если у вас есть соответствующие разрешения?
Ответы:
Я не думаю, что это возможно. Лучше всего найти и просмотреть список репозиториев Организации с помощью API.
Попробуй это:
http://${GITHUB_BASE_URL}/api/v3/orgs/${ORG_NAME}/repos?access_token=${ACCESS_TOKEN}
ssh_url
недвижимость.git clone
каждый из этихssh_url
s.Это немного лишняя работа, но для GitHub необходимо иметь правильную аутентификацию.
источник
curl -i https://github.com/api/v3/orgs/company/repos?access_token=<token>
https://github.com/api/v3/
, чтобы попробоватьhttps://api.github.com/
./users/${COMPANY}/repos
путь вместо/orgs/${COMPANY}/repos
.access_token
параметра запроса устарело. Если этот токен используется приложением, которое вы не контролируете, имейте в виду, что оно может перестать работать в результате этого устаревания.В Windows и всех системах UNIX / LINUX , используя Git Bash или любой другой Терминал , замените
YOURUSERNAME
свое имя пользователя и используйте:CNTX=users
иNAME=yourusername
, чтобы загрузить все ваши репозитории.CNTX=orgs
иNAME=yourorgname
, чтобы загрузить все репозитории вашей организации.Максимальный размер страницы - 100, поэтому вам придется вызывать его несколько раз с правильным номером страницы, чтобы получить все ваши репозитории (установите
PAGE
желаемый номер страницы, которую вы хотите загрузить).Вот сценарий оболочки, который выполняет вышеуказанное: https://gist.github.com/erdincay/4f1d2e092c50e78ae1ffa39d13fa404e
источник
Репозитории организации
Чтобы клонировать все репозитории вашей организации, попробуйте следующую однострочную оболочку:
Репозитории пользователей
Клонирование всего с использованием URL-адресов репозитория Git:
Клонирование всего с помощью Clone URL:
Вот полезная функция оболочки, которую можно добавить в файлы запуска пользователя (используя
curl
+jq
):Частные репозитории
Если вам нужно клонировать частные репозитории, вы можете добавить токен авторизации в свой заголовок, например:
или передайте его в param (
?access_token=TOKEN
), например:Ноты:
type=private
в строку запроса.hub
после настройки ключа API.Смотрите также:
Подсказки :
- Для увеличения скорости установите количество параллельных процессов, указав
-P
параметр дляxargs
(-P4
= 4 процесса).- Если вам нужно поднять ограничения GitHub, попробуйте выполнить аутентификацию, указав свой ключ API.
- Добавить
--recursive
рекурсию в зарегистрированные подмодули и обновить все вложенные подмодули внутри.источник
Эта суть выполняет задачу в одной строке командной строки:
Замените
[your_org]
названием своей организации. И установите свойper_page
при необходимости .ОБНОВИТЬ:
Как упоминалось в ATutorMe, максимальный размер страницы составляет 100, согласно документации GitHub .
Если у вас более 100 репозиториев, вам нужно будет добавить
page
параметр в свой URL-адрес, и вы можете запустить команду для каждой страницы.Примечание. Параметр по умолчанию
per_page
-30
.источник
Перейдите в Настройки учетной записи -> Приложение и создайте ключ API.
Затем вставьте ключ API, URL-адрес экземпляра github и название организации в сценарий ниже.
Сохраните это в файл,
chmod u+x
файл, затем запустите.Спасибо Арно за рубиновый код.
источник
Так что я тоже добавлю свой ответ. :) (я нашел это просто)
Список выборки (я использовал компанию "magento"):
Используйте
clone_url
вместоssh_url
доступа использовать HTTP.Итак, давайте клонируем их все! :)
Если вы собираетесь получить частное репо - просто добавьте параметр GET
?access_token=YOURTOKEN
источник
Я обнаружил, что комментарий в gist @seancdavis очень полезен, особенно потому, что, как и исходный плакат, я хотел синхронизировать все репозитории для быстрого доступа, однако подавляющее большинство из них были частными.
Замените [[USERNAME]] своим именем пользователя github, а [[ORGANIZATION]] - своей организацией Github. Вывод (метаданные репозитория JSON) будет передан простому скрипту ruby:
источник
.../orgs/[[organization]]/repos...
на.../users/[[username]]/repos...
. Теперь я могу быстро импортировать всю свою работу на разные локальные машины. СПАСИБО!Я сделал скрипт на Python3 и Github APIv3
https://github.com/muhasturk/gitim
Просто беги
источник
Этот однострочный файл python сделает то, что вам нужно. Это:
для каждого делает системный вызов
git clone
источник
источник
?page=2
.Простое решение:
источник
Чтобы использовать его (при условии, что у вас установлен nodejs)
Это позволит получить список всех репозиториев
wires
и записать информацию вtest
каталог, используя данные авторизации (пользователь / пароль), которые вы указываете в CLI.В частности, это
На самом деле он не клонирует репозитории, а вместо этого записывает
.txt
файл, в который вы можете перейтиxargs
для клонирования, например:Может быть, это будет полезно для вас; это всего лишь несколько строк JS, поэтому их будет легко приспособить к вашим потребностям.
источник
Для этого также есть очень полезный модуль npm . Он может не только клонировать, но и извлекать (обновлять данные, которые у вас уже есть).
Вы просто создаете такую конфигурацию:
и сделай
gitall clone
например. Илиgitall pull
источник
В случае, если кто-то ищет решение для Windows, вот небольшая функция в PowerShell, чтобы сделать трюк (может быть один лайнер / псевдоним, если не тот факт, что он мне нужен для работы как с прокси, так и без него).
источник
Таким образом, на практике, если вы хотите клонировать все операции РЕПО из организации ,
FOO
которые соответствуютBAR
, вы можете использовать одну гильзу ниже, что требует JQ и общих утилит Cliисточник
Другой сценарий оболочки с комментариями, который клонирует все репозитории (публичные и частные) от пользователя:
источник
Создайте псевдоним / func для bash в своем
~/.bashrc file
Я решил это для своей команды, создав псевдоним / bash func в моем
~/.bashrc file
шаги
откройте терминал или оболочку Linux и откройте
~/.bashrc file
:добавить эту функцию:
сохраните и закройте файл ~ / .bashrc, а затем закройте терминал - вам нужно сделать это, иначе новая функция не инициализируется:
откройте новый терминал и попробуйте:
пример : если ваш личный URL-адрес репозитория github называется https://github.com/awesome-async, команда будет
Важный
per_page=200
в конце первой переменнойORG_URL
задает число операций РЕПО , которые будут клонированы, поэтому обратите особое внимание , что:Надеюсь это поможет! :)
источник
...repos?page=${2}&per_page=100";
Вы можете получить список репозиториев, используя,
curl
а затем перебрать указанный список с помощью цикла bash:источник
Вы можете использовать инструмент с открытым исходным кодом для клонирования нескольких репозиториев 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
источник
Чтобы клонировать только частные репозитории с учетом ключа доступа и установленного модуля python 3 и запросов:
источник
Решение Python3, которое включает исчерпывающую разбивку на страницы через
Link
заголовок.Предварительные условия:
pip3 install links-from-link-header
Затем вы можете использовать
xargs
или параллельно и:cat repolist | parallel -I% hub clone %
источник
Если у вас есть список репозиториев в виде такого списка, то этот сценарий оболочки работает:
источник
Я создал образец пакетного сценария. Вы можете скачать все частные / общедоступные репозитории с github.com. После загрузки репозиторий он автоматически преобразуется в zip-файл.
Примечание: файл files.txt должен содержать только имена репозитория, например:
источник
Обновление от 19 мая
используйте эту команду bash для организации (включая частное репо)
источник
Преобладающие ответы здесь не учитывают, что Github API вернет не более 100 репозиториев, несмотря на то, что вы можете указать в
per_page
. Если вы клонируете организацию Github с более чем 100 репозиториями, вам нужно будет перейти по ссылкам на страницы в ответе API.Для этого я написал инструмент CLI :
Это клонирует все репозитории в
myorg
организации в текущий рабочий каталог.источник
Для организаций, к которым у вас есть доступ с частными репозиториями:
Он использует
html_url
, поэтому вам не нужноaccess_token
просто вводить свой пароль github при появлении запроса.источник
Клонируйте все ваши репозитории, не являющиеся форками:
Клонируйте свои сущности:
Эта
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
Документы Github API для репозиториев
источник
источник
Чтобы клонировать все ваши собственные частные и общедоступные репозитории, просто создайте новый токен доступа с доступом к репозиториям и используйте его:
(замените свой токен доступа и имя пользователя)
Это клонирует все репозитории в текущей папке
Это небольшая программа на bash, вы можете просто вставить ее в терминал и нажать Enter.
источник