Допустим есть ситуация, когда у тебя много проектов на github и ты хочешь хранить локальную копию всех проектов на разных устройствах и носителях. У тебя есть простой вариант - указать список репозиториев, написать bash скрипт, который бы клонировал все репозитории, и еще один bash скрипт, который бы их всех обновлял. Но bash скрипты не очень приятная вещь, когда ты знаешь python. С python будет по легче, но не забудь тебе придётся писать асинхронные REST API запросы к серверу GitHub для получения списка репозиториев, потому что писать вручную список репозиториев долго, потом тебе придётся разобраться как обновлять и копировать репозитории в многопоточном режиме, потому что синхронное обновление даже 40 репозиториев это 2 минуты ожидания. В общем работенка на два вечера + документация проекта + тестирование, в итоге 3 дня разработки для достижения поставленной цели. Но зачем тебе это делать когда это уже сделали ?

Проект git_clones

Документация git_clones

Получаем список всех репозиториев у указанного пользователя. В итоге вы получите файл ./look.json в котором будет храниться информация о пользователи, и список репозиториев. Обратите внимание, что приватные репозитории не будут получены, их нужно указывать вручную в этом же файле look.json.

gitclones getrep ИмяПользователяGitHub

После того как вы получили список репозиториев, выполните эту команду для их клонирования. В опцию -o укажите куда клонировать репозитории.

gitclones clones -o ПутьКудаКлонировать

После того как вы клонировали репозитории, вы можете за одну команду выполнить git pull для всех репозиториев.

gitclones cmd pull -i ПутьК_ПапкеС_Репозиториями

Комментарии (22)


  1. Chuvi
    24.02.2022 19:25
    +5

    1. Почему ридми только на русском?

    2. Почему бинарник в репу заккомичен, а не в релизах?

    3. Почему нет бинарника под Windows, MacOs и иные операционки?


    1. denisxab Автор
      24.02.2022 19:37
      -13

      1. Потому что англичане не заботят о переводе на русский язык

      2. Бинарник и в репе и в релизе.

      3. Я не поддерживаю эти проприетарные системы, ну и потому что мне ни кто не давал лицензию для тестирования на этих платформах.


      1. Chuvi
        24.02.2022 19:52
        +6

        1. Английский язык знают многие. Вы, надеюсь, в их числе. В качестве упражнения, найдите репу описанием сна японском, например, или арабском. И подумайте о смысле перевода на международный язык.

        2. Зачем бинарник в репе?

        3. Это проблемы пользователей? Есть бесплатные CI-решения, тестируйте в них.


        1. kbaa
          25.02.2022 02:16

          А если автор не знает английский? Сталкивался с доками на испанском, ничего страшного в этом не вижу, и в голову не приходило требовать от авторов перевода, по крайней мере, пока я не плачу за это (ровно как и бинарников под различные оси). Очень странная претензия, имхо.


      1. ShadF0x
        25.02.2022 03:17
        +3

        Потому что англичане не заботят о переводе на русский язык

        Тогда весь проект нужно было писать не на буржуйском Python, а на родном 1С.

        Ну или YoptaScript, чтоб парадигму особо не менять.


    1. denisxab Автор
      25.02.2022 12:43

      Не понимаю за что мне ставят дизайки и карму портят, у вас нет ни одного аналога, который был бы лучше, чем этот. Мне ставят дизлайк за низкий технический уровень, но нет ни одного комментария который бы указал чем он низкий ? Ставьте тогда дизлайки Abode за то что он не распространяет свои программы на linux, ставьте дизлайк amazon за то что он не переводит свои сайты на другие языки. Я поэтому и стал программистом, потому что пока другие будут осуждать, и предлагать какие-то не дальновидные и нерасширяемы проекты, решение задачи с места не сдвинется. Я бы удалил этот пост и все свои другие, раз они так вам не нравятся, но может быть они будут кому-то полезны, по крайне мере он мне полезен.


  1. 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 реп на страницу не умеет выдавать.


    1. denisxab Автор
      24.02.2022 19:39
      -22

      Выглядит ненадежно и запутано.


      1. Chuvi
        24.02.2022 19:47
        +15

        Пожалуй, соглашусь. Куча непонятного кода на питоне выглядят надёжнее.


    1. denisxab Автор
      24.02.2022 19:56
      -1

      У меня такой проблемы нет, страницы автоматически перелистываются.


      1. Alatarum
        24.02.2022 20:20

        Это хорошо. Впрочем, это не большая проблема — операция клонирования не очень часто выполняется, но, при необходимости, перелистывание в однострочнике тоже не сложно дописать.
        В Вашем решении скорее интереснее распараллеливание скачивания. Я бы может даже попробовал его использовать, но стиль изложения как-то не способствует позитивному восприятию. Да и к тому же, там всё на русском от документации до интерфейса, никакой локализации — я этим пользоваться просто не смогу.


        1. edo1h
          24.02.2022 20:23

          распараллеливание легко делается с помощью xargs


  1. KohrAhr
    24.02.2022 20:06

    SCM Notifier - SVN & GIT repo watcher. https://github.com/pocorall/scm-notifier


    1. denisxab Автор
      24.02.2022 20:06
      -1

      Хороший пример. Это вариант для Windows пользователей.


  1. Matisumi
    24.02.2022 20:11
    +4

    Ах, эти милые сердцу велосипеды!


  1. Dr9vik
    24.02.2022 20:57

    осталось понять зачем...


  1. deitry
    24.02.2022 22:25

    Когда работал с ROS, наткнулся на тулзу, которую активно пользуют и продвигают его создатели: https://github.com/dirk-thomas/vcstool (вы только гляньте список репозиториев этих психов).

    Это не совсем то же самое что предлагается в статье (в частности, на входе должен быть уже сформированный список репозиториев), но в чём-то даже лучше, потому что помимо Git поддерживает Mercurial, Subversion и Bazaar.


  1. ArsenAbakarov
    24.02.2022 22:50
    +3

    Opensource это де-факто англ. язык доки и комментов в коде


  1. lorc
    25.02.2022 00:09

    А гугловский repo project чем не угодил? Он конечно изначально не для этого, но можно приготовить его нужным образом.


  1. storoj
    25.02.2022 00:46

    Что если сделать только утилиту, которая добавит все нужные репозитории как submodules к одному "мега-репозиторию", чтобы потом синхронизировать их все исключительно стандартными средствами git?


    1. storoj
      25.02.2022 00:49

      наверное всего-то нужно ответ API Github сконвертировать в .gitmodules файл


  1. NN1
    25.02.2022 14:35
    +1

    Раз это Python то не проще распространять через pip install ?

    кстати, а нужен ли бинарник?

    Если таки нужен бинарник то пакетные менеджеры apt/yum/winget… install справляются с этим очень хорошо.