Git – это, безусловно, самая используемая система контроля версий.
Первоначально созданная Линусом Торвальдсом, она является бесплатным программным обеспечением с открытым исходным кодом и выпускается под лицензией GPLv2.
Многие онлайн-платформы, такие как Github или Gitlab, позволяют разработчикам легко хранить и отслеживать изменения в своем коде в публичных или частных репозиториях, используя git в качестве бэкенда.
В этой статье мы поговорим о gickup, хорошем инструменте, написанном на Go, который позволяет нам создавать резервные копии наших git-репозиториев и зеркалировать их локально или с одной платформы на другую.
Установка
Gickup – это программное обеспечение с открытым исходным кодом: его код размещен на Github.
На момент написания статьи инструмент еще не доступен ни в одном репозитории дистрибутива Linux, поэтому, если мы не хотим компилировать его, есть два основных способа его использования:
- загрузив предварительно скомпилированный бинарный файл с Github
- с помощью специального образа Docker
Использование предварительно скомпилированного бинарного файла
На момент написания статьи 0.10.17 является последней доступной версией gickup; мы можем загрузить предварительно скомпилированный двоичный файл со страницы релизов проекта на Github.
Предварительно скомпилированные двоичные файлы существуют для всех основных операционных систем и для наиболее распространенных архитектур.
Мы хотим загрузить версию для Linux, конечно, вместе с файлом *checksum.txt, чтобы проверить целостность данных.
Чтобы запустить gickup на моей машине, мне нужно загрузить версию “amd64”:
Для проверки контрольной суммы tarball, предполагая, что два файла находятся в одном каталоге (как это следует из выполнения вышеприведенной команды), мы можем выполнить команду:
Если контрольная сумма соответствует записанной в файле, мы должны увидеть сообщение, подобное приведенному ниже:
gickup_0.10.17_linux_amd64.tar.gz: OK
Чтобы извлечь tarball, выполните команду:
Чтобы использовать приложение, нам нужно просто запустить извлеченный двоичный файл, как и любой другой исполняемый файл, передав в качестве первого аргумента путь к файлу конфигурации (подробнее об этом позже):
Использование специального образа Docker
Если мы не хотим использовать предварительно скомпилированный бинарный файл, в качестве альтернативы мы можем загрузить файл docker-compose.yml и запустить инструмент в контейнере с помощью docker или podman.
Мы можем загрузить файл прямо из командной строки:
Следующий шаг заключается в размещении конфигурационного файла, который в данном случае должен иметь имя conf.yml, в той же директории, что и файл, который мы только что скачали.
Для того чтобы запустить резервное копирование, нам нужно просто запустить:
Или, если вы используете podman вместо docker:
Если вы используете docker и ваш пользователь входит в группу “docker”, вы можете не использовать sudo; вместо этого podman может работать без привилегий root.
Это инструкция, которую мы можем использовать для запуска gickup. Мы можем указать, что и как должен делать инструмент, с помощью конфигурационного файла, о котором мы говорили выше.
Рассмотрим пример его использования.
Конфигурационный файл gickup
Gickup использует конфигурационный файл YAML, в котором мы определяем источники и места назначения наших резервных копий, а также другие полезные действия.
Приведем несколько примеров. В рамках этого руководства я загружу все свои репозитории с Github на локальную машину:
source:
github:
- token: <github-token>
username: egdoc
destination:
local:
- path: ~/Downloads/gitbackup
structured: true
zip: true
keep: 5
bare: true
В приведенном выше примере я указал, что хочу создать резервную копию репозиториев Github, используя ключ github.
Поскольку я хочу создавать резервные копии как публичных, так и частных репозиториев, мне пришлось указать токен в качестве аргумента ключа token.
Сгенерировать токен Github довольно просто: достаточно перейти в “Settings -> Developer settings -> Personal access tokens” в вашем профиле Github, выбрать вид токена и предоставить ему минимально необходимый набор привилегий.
В данном случае будет достаточно просто установить флажок “repo”.
Как только токен будет сгенерирован, сохраните его, поскольку в будущем вы не сможете его визуализировать.
Следующий ключ, который я использовал в конфигурационном файле, – username, чтобы указать пользователя для процесса клонирования.
В данном случае, поскольку я хотел, чтобы хранилища были клонированы локально, я использовал ключ path, чтобы указать локальный путь, и ключ structured, чтобы gickup клонировал хранилища в дерево каталогов, которое отражает исходный сайт и имя пользователя.
В данном случае репозитории, размещенные на Github, будут клонированы в каталог ~/Downloads/gitbackup/github.com/egdoc.
Ключ zip используется для указания того, что мы хотим, чтобы каждый клонированный репозиторий был запечатан; ключ keep, вместо этого, используется для указания количества “запечатанных” резервных копий, которые должны быть сохранены.
Наконец, установив значение ключа bare в true, я указал, что хочу, чтобы хранилища были клонированы как “пустые”.
Зеркальное копирование репозиториев с одной платформы на другую
В предыдущем примере я клонировал все свои репозитории, размещенные на Github, на локальную машину.
Однако с помощью gickup мы также можем клонировать репозитории непосредственно с одной платформы на другую.
Предположим, я хочу зеркалировать все репозитории на Gitlab.
Вот что я могу написать:
source:
github:
- token: <github-token>
username: egdoc
destination:
gitlab:
- token: <gitlab-token>
username: egdoc
Во всех примерах вы можете видеть, что я указал только название платформы (например, “github” или “gitlab”), а не полный URL платформы.
Это возможно, потому что gickup имеет встроенную поддержку этих платформ. В качестве исходного кода поддерживаются следующие платформы:
- Github
- Gitea
- Gogs
- Gitlab
- Bitbucket
- Onedev
- Sourcehut
Кроме того, ключ “Any” может быть использован для указания информации о платформах, не включенных в приведенный выше список.
Платформы, поддерживаемые в качестве места назначения, следующие:
- Gitea
- Gogs
- Gitlab
- Local
Заключение
В этом руководстве мы рассказали о gickup, хорошем инструменте с открытым исходным кодом, написанном на Go, который мы можем использовать для зеркалирования наших git-репозиториев локально или с одной веб-платформы на другую.
см. также:
- 🦊 Добавление Gitleaks в пайплайн Gitlab CI
- 🦊 Как сменить видимость проекта Gitlab
- 🌐 Что такое GitLab и где его разместить?