Резервное копирование репозиториев с 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)
screwer
07.01.2023 03:27+6Откройте для себя опцию "--mirror". И клонирование пройдет намного быстрее, и упаковка будет не нужна, т.к.репозиторий уже в компактном виде и с собранным мусором
Aquahawk
07.01.2023 09:43и хорошее описание чем --mirror отличается от --bare https://stackoverflow.com/questions/3959924/whats-the-difference-between-git-clone-mirror-and-git-clone-bare
Jessy_James Автор
07.01.2023 14:59Целью ставил получить все свои проекты и записать на внешний жесткий диск, где у меня хранятся копии рабочих виртуалок и т.п. Что бы в случае чего не потерять то что делал.
MartStap
07.01.2023 03:39+7Вдруг кому-то полезно будет))) А так спасибо!
Для резервного копирования ваших репозиториев вам первым делом нужно установить Git на ваш компьютер. Как только вы установите Git, откройте терминал и введите команду «git clone --mirror <URL репозитория>». Это создаст копию репозитория на вашем компьютере. Повторите это для всех репозиториев, которые вы хотите сохранить.Для Gitlab процесс похож. Сначала установите git на ваш компьютер и откройте терминал. Затем введите команду «git clone --mirror <URL репозитория>». Это создаст зеркальное изображение репозитория. Повторите это для всех репозиториев, которые вы хотите сохранить.
stroitskiy
07.01.2023 04:53-2А зачем это вообще делать? Скриптом?
Мне сдается, что надежность github сервера на порядок выше чем у оборудования автора. Ну и git clone на пару устройств дает тот же эффект.
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.
Jessy_James Автор
07.01.2023 14:26У меня нет сервера, есть внешний жесткий диск. Делаю git clone по все проектам, только к примеру на github у меня за 60 проектов. И как-то руками не очень удобно весь этот список проходить. Мне хотелось его автоматически получить и по нему clone пройтись.
Borz
07.01.2023 09:19+3ставите что-то типа Gitea. Создаёте в нём нужные вам mirror репозитории и вот у вас не просто backup реп, а полноценный локальный VCS, который ещё и сам будет синхронизировать дальше репозитарии.
А можно и в обратном направлении сделать - использовать тот же Gitea как локальный VCS, а для нужных реп настроить push-синхронизацию на какой-нибудь GitHub/GitLab
alexdesyatnik
07.01.2023 12:04Jessy_James Автор
07.01.2023 15:02Вот не нашел такую вещь, перед тем как писать. В году 2014 оф. клиент github мог все проекты разом на компьютер выкачать. Сейчас его поставил, а он только по одному качает.
papkinv
07.01.2023 14:27Gitlab (standalone) имеет в себе механизм резервного копирования. С кучей вариантов хранения. РК делается для полной структуры: c репозиториями (проектами) и группами.
vs39
07.01.2023 14:27Ну так то есть для этого проверенные облачные сервисы, и городить скрипты выглядит по-деревенски, если уж действительно хочется обезопаситься
SWATOPLUS
07.01.2023 17:24-2А что на счёт бэкапов настроек, прав доступа, issues, PRs. Это имеет смысл. А бэкап гит РЕПО смысла не имеет, так как у каждого разработчика уже есть бэкап на компе. Бессмысленная статья.
anonymous
НЛО прилетело и опубликовало эту надпись здесь