Допустим есть ситуация, когда у тебя много проектов на github
и ты хочешь хранить локальную копию всех проектов на разных устройствах и носителях. У тебя есть простой вариант - указать список репозиториев, написать bash
скрипт, который бы клонировал все репозитории, и еще один bash
скрипт, который бы их всех обновлял. Но bash
скрипты не очень приятная вещь, когда ты знаешь python
. С python
будет по легче, но не забудь тебе придётся писать асинхронные REST API запросы к серверу GitHub для получения списка репозиториев, потому что писать вручную список репозиториев долго, потом тебе придётся разобраться как обновлять и копировать репозитории в многопоточном режиме, потому что синхронное обновление даже 40 репозиториев это 2 минуты ожидания. В общем работенка на два вечера + документация проекта + тестирование, в итоге 3 дня разработки для достижения поставленной цели. Но зачем тебе это делать когда это уже сделали ?
Получаем список всех репозиториев у указанного пользователя. В итоге вы получите файл ./look.json
в котором будет храниться информация о пользователи, и список репозиториев. Обратите внимание, что приватные репозитории не будут получены, их нужно указывать вручную в этом же файле look.json
.
gitclones getrep ИмяПользователяGitHub
После того как вы получили список репозиториев, выполните эту команду для их клонирования. В опцию -o
укажите куда клонировать репозитории.
gitclones clones -o ПутьКудаКлонировать
После того как вы клонировали репозитории, вы можете за одну команду выполнить git pull
для всех репозиториев.
gitclones cmd pull -i ПутьК_ПапкеС_Репозиториями
Комментарии (22)
Alatarum
24.02.2022 19:36+12Три дня разработки? Серьёзно? Я это делаю двумя однострочниками.
Склонировать:curl -s "https://api.github.com/users/<USER>/repos?per_page=100&page=1" | jq -r '.[] | select(.name ) | select(.fork == false).ssh_url' | xargs -L1 git clone
Обновить:find . -maxdepth 1 -type d -exec sh -c '(cd {} && echo ">>> Pull repo \"$(basename "$(pwd)")\"" && git pull --all | grep -v "Fetching origin" | grep -v "Already up to date")' ';'
Единственный недостаток — когда реп много, при клонировании страницы надо руками перебирать, потому что гитхаб больше 100 реп на страницу не умеет выдавать.denisxab Автор
24.02.2022 19:56-1У меня такой проблемы нет, страницы автоматически перелистываются.
Alatarum
24.02.2022 20:20Это хорошо. Впрочем, это не большая проблема — операция клонирования не очень часто выполняется, но, при необходимости, перелистывание в однострочнике тоже не сложно дописать.
В Вашем решении скорее интереснее распараллеливание скачивания. Я бы может даже попробовал его использовать, но стиль изложения как-то не способствует позитивному восприятию. Да и к тому же, там всё на русском от документации до интерфейса, никакой локализации — я этим пользоваться просто не смогу.
KohrAhr
24.02.2022 20:06SCM Notifier - SVN & GIT repo watcher. https://github.com/pocorall/scm-notifier
deitry
24.02.2022 22:25Когда работал с ROS, наткнулся на тулзу, которую активно пользуют и продвигают его создатели: https://github.com/dirk-thomas/vcstool (вы только гляньте список репозиториев
этих психов).Это не совсем то же самое что предлагается в статье (в частности, на входе должен быть уже сформированный список репозиториев), но в чём-то даже лучше, потому что помимо Git поддерживает Mercurial, Subversion и Bazaar.
lorc
25.02.2022 00:09А гугловский repo project чем не угодил? Он конечно изначально не для этого, но можно приготовить его нужным образом.
storoj
25.02.2022 00:46Что если сделать только утилиту, которая добавит все нужные репозитории как submodules к одному "мега-репозиторию", чтобы потом синхронизировать их все исключительно стандартными средствами git?
NN1
25.02.2022 14:35+1Раз это Python то не проще распространять через pip install ?
кстати, а нужен ли бинарник?
Если таки нужен бинарник то пакетные менеджеры apt/yum/winget… install справляются с этим очень хорошо.
Chuvi
Почему ридми только на русском?
Почему бинарник в репу заккомичен, а не в релизах?
Почему нет бинарника под Windows, MacOs и иные операционки?
denisxab Автор
Потому что англичане не заботят о переводе на русский язык
Бинарник и в репе и в релизе.
Я не поддерживаю эти проприетарные системы, ну и потому что мне ни кто не давал лицензию для тестирования на этих платформах.
Chuvi
Английский язык знают многие. Вы, надеюсь, в их числе. В качестве упражнения, найдите репу описанием сна японском, например, или арабском. И подумайте о смысле перевода на международный язык.
Зачем бинарник в репе?
Это проблемы пользователей? Есть бесплатные CI-решения, тестируйте в них.
kbaa
А если автор не знает английский? Сталкивался с доками на испанском, ничего страшного в этом не вижу, и в голову не приходило требовать от авторов перевода, по крайней мере, пока я не плачу за это (ровно как и бинарников под различные оси). Очень странная претензия, имхо.
ShadF0x
Тогда весь проект нужно было писать не на буржуйском Python, а на родном 1С.
Ну или YoptaScript, чтоб парадигму особо не менять.
denisxab Автор
Не понимаю за что мне ставят дизайки и карму портят, у вас нет ни одного аналога, который был бы лучше, чем этот. Мне ставят дизлайк за низкий технический уровень, но нет ни одного комментария который бы указал чем он низкий ? Ставьте тогда дизлайки Abode за то что он не распространяет свои программы на linux, ставьте дизлайк amazon за то что он не переводит свои сайты на другие языки. Я поэтому и стал программистом, потому что пока другие будут осуждать, и предлагать какие-то не дальновидные и нерасширяемы проекты, решение задачи с места не сдвинется. Я бы удалил этот пост и все свои другие, раз они так вам не нравятся, но может быть они будут кому-то полезны, по крайне мере он мне полезен.