main

Резервное копирование репозиториев с git серверов на основе github и gitlab по токену. Скрипт скачивает все Ваши репозитории доступные по токену и архивирует их. Давно хотел написать такой инструмент т.к. использую и те и те сервера в работе и личных целях. У меня полно старых проектов которые хранятся только на git, если с ним что-то случится, то их уже не будет.


Как пользоваться


Написано на python3, необходимая версии >= 3.7, скачиваем с github, устанавливаем зависимости и запускаем:


git clone https://github.com/dvjdjvu/gitReposDownloader
cd gitReposDownloader

curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
&& sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh libomp-dev -y

pip3 install -r requirements.txt

Скачиваем репозитории:


./src/main.py -s github.com -t ghp_TOKEN



Для работы с gitlab используется модуль python-gitlab. Взаимодействие с github идет через утилиту gh, которая запомнит токен. Удалить токен из памяти gh:


gh auth logout

В директории запуска скрипта создается архив имя_сервера.tar.gz или скрипт выводит ошибку причины не скачивания репозиториев.




Скачивание распараллелено в multiprocessing.cpu_count() потоков.


Спасибо за внимание.


Ссылки


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


  1. anonymous
    00.00.0000 00:00

    НЛО прилетело и опубликовало эту надпись здесь


  1. screwer
    07.01.2023 03:27
    +6

    Откройте для себя опцию "--mirror". И клонирование пройдет намного быстрее, и упаковка будет не нужна, т.к.репозиторий уже в компактном виде и с собранным мусором


    1. Aquahawk
      07.01.2023 09:43

      и хорошее описание чем --mirror отличается от --bare https://stackoverflow.com/questions/3959924/whats-the-difference-between-git-clone-mirror-and-git-clone-bare


    1. Jessy_James Автор
      07.01.2023 14:59

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


      1. screwer
        07.01.2023 23:19

        И ?


  1. MartStap
    07.01.2023 03:39
    +7

    Вдруг кому-то полезно будет))) А так спасибо!

    Для резервного копирования ваших репозиториев вам первым делом нужно установить Git на ваш компьютер. Как только вы установите Git, откройте терминал и введите команду «git clone --mirror <URL репозитория>». Это создаст копию репозитория на вашем компьютере. Повторите это для всех репозиториев, которые вы хотите сохранить.

    Для Gitlab процесс похож. Сначала установите git на ваш компьютер и откройте терминал. Затем введите команду «git clone --mirror <URL репозитория>». Это создаст зеркальное изображение репозитория. Повторите это для всех репозиториев, которые вы хотите сохранить.


  1. stroitskiy
    07.01.2023 04:53
    -2

    А зачем это вообще делать? Скриптом?

    Мне сдается, что надежность github сервера на порядок выше чем у оборудования автора. Ну и git clone на пару устройств дает тот же эффект.


    1. Lazytech
      07.01.2023 06:24
      +1

      Мне сдается, что надежность github сервера на порядок выше чем у оборудования автора.

      Наверное, речь идет не только о надежности хранения. В свете продолжающихся событий смутно подозреваю, что у пользователей в некоторых отдельно взятых странах рано или поздно могут возникнуть проблемы с доступом к GitHub и/или Gitlab.

      Да и вообще наличие лишней резервной копии не повредит. Мало ли, хакеры взломают учетку и удалят все репозитории. Такие случаи вроде бывали: https://www.google.com/search?q=github+account+hacked+all+repos+deleted

      К примеру, некий хакер однажды взломал гитхабовскую учетку Microsoft:
      https://www.bleepingcomputer.com/news/security/microsofts-github-account-hacked-private-repositories-stolen/
      ЦИТАТА:
      A hacker claims to have stolen over 500GB of data from Microsoft's private GitHub repositories, BleepingComputer has learned.
      This evening, a hacker going by the name Shiny Hunters contacted BleepingComputer to tell us they had hacked into the Microsoft GitHub account, gaining full access to the software giant's 'Private' repositories.
      <...>
      Update 5/8/20: Updated to include info that the breach was confirmed as legitimate by MS employee and statement from Microsoft.


    1. Jessy_James Автор
      07.01.2023 14:26

      У меня нет сервера, есть внешний жесткий диск. Делаю git clone по все проектам, только к примеру на github у меня за 60 проектов. И как-то руками не очень удобно весь этот список проходить. Мне хотелось его автоматически получить и по нему clone пройтись.


  1. Borz
    07.01.2023 09:19
    +3

    ставите что-то типа Gitea. Создаёте в нём нужные вам mirror репозитории и вот у вас не просто backup реп, а полноценный локальный VCS, который ещё и сам будет синхронизировать дальше репозитарии.

    А можно и в обратном направлении сделать - использовать тот же Gitea как локальный VCS, а для нужных реп настроить push-синхронизацию на какой-нибудь GitHub/GitLab


  1. alexdesyatnik
    07.01.2023 12:04

    1. Jessy_James Автор
      07.01.2023 15:02

      Вот не нашел такую вещь, перед тем как писать. В году 2014 оф. клиент github мог все проекты разом на компьютер выкачать. Сейчас его поставил, а он только по одному качает.


  1. papkinv
    07.01.2023 14:27

    Gitlab (standalone) имеет в себе механизм резервного копирования. С кучей вариантов хранения. РК делается для полной структуры: c репозиториями (проектами) и группами.


  1. vs39
    07.01.2023 14:27

    Ну так то есть для этого проверенные облачные сервисы, и городить скрипты выглядит по-деревенски, если уж действительно хочется обезопаситься


  1. davaeron
    07.01.2023 15:44

    Я пользуюсь Gickup: https://github.com/cooperspencer/gickup


  1. SWATOPLUS
    07.01.2023 17:24
    -2

    А что на счёт бэкапов настроек, прав доступа, issues, PRs. Это имеет смысл. А бэкап гит РЕПО смысла не имеет, так как у каждого разработчика уже есть бэкап на компе. Бессмысленная статья.


  1. BorisDr
    08.01.2023 00:10