Skip to content

Latest commit

 

History

History
207 lines (161 loc) · 9.42 KB

README.RU.md

File metadata and controls

207 lines (161 loc) · 9.42 KB

Gitlobster

Инструмент полного копирования всех доступных репозиториев с сервера GitLab.

Crates.io Docker Image Version (latest semver) GitHub Workflow Status GitHub Workflow Status

EN | RU




Ключевые функции

  • Клонирование всех доступных репозиториев
  • Клонирование всех веток каждого репозитория
  • Загрузка всех репозиториев в другой сервер GitLab (или в другую группу)
  • Поддержка скачивания только обновлений (включая скачивание новых репозиториев), после первого полного клонирования
  • Сохранение иерархии групп
  • Поддержка фильтров (в том числе на основе регулярных выражений) для копирования только нужных репозиториев

Установка

Docker

docker run --rm -it lowitea/gitlobster:latest --help

Запуск предварительно собранных бинарных файлов

  1. Скачать собранный архив на странице релизов под свою платформу.
  2. Распаковать архив.
  3. Запустить через консоль файл gitlobster.

Cargo

cargo install gitlobster

Сборка из исходников

# клонирование репозитория
git clone https://github.com/lowitea/gitlobster.git
# переход в скачанную директорию
cd gitlobster
# сборка
cargo build --release
# запуск
./target/release/gitlobster --help

Также есть возможность запустить в режиме разработки, без предварительной сборки.

# в директории с проектом
cargo run -- --help

Использование

GitLab токен

Для работы программы нужно сгенерировать токен GitLab с правами на чтение API (read_api). Если не используется копирование по SSH, также необходимы права на чтение репозиториев (read_repository).

Если репозитории копируются во второй GitLab, то токен нужен также и для него. Необходимы полные права на API (api). Если не используется загрузка по SSH, также необходимы права на запись репозиториев (write_repository).

Сгенерировать токены можно на странице настроек.

SSH

Если используется копирование через SSH, тогда ssh-ключи должны быть добавлены в GitLab.

Копирование всех репозиториев в другой GitLab

gitlobster \
    --ft=<FETCH_TOKEN> \
    --fu=https://gitlab.com/ \
    --bt=<UPLOAD_TOKEN> \
    --bu=https://gitlab.com/ \
    --bg=gitlobster_test/upload

Скачивание всех репозиториев в локальную папку

gitlobster \
    --ft=<FETCH_TOKEN> \
    --fu=https://gitlab.com/ \
    -d out_directory

Поддерживается одновременное сохранение репозиториев локально и копирование во второй GitLab.

Использование фильтров и фильтрующих флагов

gitlobster \
    --ft=<FETCH_TOKEN> \
    --fu=https://gitlab.com/ \
    --only-owned \
    --include="^gitlobster_test/download/project_2" \
    --include="^gitlobster_test/download/project_1" \
    -d out_directory

Также поддерживается флаг --exclude для скачивания всех репозиториев, кроме тех, что подпадают под шаблон.

Можно использовать только один из флагов --exclude или --include. При одновременном использовании этих флагов будет выдана соответствующая ошибка.

Использование через докер

docker run --rm -it -v $(pwd)/out:/out lowitea/gitlobster:latest \
    --ft=<FETCH_TOKEN> \
    --fu=https://gitlab.com/ \
    --include='^gitlobster_test/example' \
    -d /out

Вызов help

$ gitlobster --help

A tool for cloning all available repositories in a GitLab instance

Usage: gitlobster [OPTIONS] --fu <FETCH URL> --ft <FETCH TOKEN>

Options:
      --fu <FETCH URL>
          The GitLab instance URL for fetch repositories (example: https://gitlab.local/) [env: GTLBSTR_FETCH_URL=]
      --ft <FETCH TOKEN>
          Your personal GitLab token for fetch repositories [env: GTLBSTR_FETCH_TOKEN=]
      --bu <BACKUP URL>
          The GitLab instance URL for backup repositories (example: https://backup-gitlab.local/) [env: GTLBSTR_BACKUP_URL=]
      --bt <BACKUP TOKEN>
          Your personal GitLab token for backup repositories [env: GTLBSTR_BACKUP_TOKEN=]
      --bg <BACKUP GROUP>
          A target created group on backup GitLab for push repositories [env: GTLBSTR_BACKUP_GROUP=]
  -i, --include <PATTERN>
          Include regexp patterns (cannot be used together with --exclude flag, may be repeated) [env: GTLBSTR_INCLUDE=]
  -x, --exclude <PATTERN>
          Comma separated exclude regexp patterns (cannot be used together with --include flag, may be repeated) [env: GTLBSTR_EXCLUDE=]
  -d, --dst <DIRECTORY>
          A destination local folder for save downloaded repositories [env: GTLBSTR_DST=]
  -v, --verbose...
          Verbose level (one or more, max four)
      --dry-run
          Show all projects to download
      --objects-per-page <COUNT>
          Low-level option, how many projects can fetch in one request [env: GTLBSTR_OBJECTS_PER_PAGE=]
      --limit <COUNT>
          Maximum projects to download [env: GTLBSTR_LIMIT=]
      --concurrency-limit <LIMIT>
          Limit concurrency download [env: GTLBSTR_CONCURRENCY_LIMIT=] [default: 21]
      --only-owned
          Download projects explicitly owned by user [env: GTLBSTR_ONLY_OWNED=]
      --only-membership
          Download only user's projects [env: GTLBSTR_ONLY_MEMBERSHIP=]
      --group <GROUP>
          Download projects only in group [env: GTLBSTR_GROUP=]
      --download-ssh
          Enable download by ssh instead of http. An authorized ssh key is required [env: GTLBSTR_DOWNLOAD_SSH=]
      --upload-ssh
          Enable upload by ssh instead of http. An authorized ssh key is required [env: GTLBSTR_UPLOAD_SSH=]
      --download-force-http
          Force download repositories by insecure protocol. Does not work with the download_ssh flag [env: GTLBSTR_DOWNLOAD_FORCE_HTTP=]
      --download-force-https
          Force download repositories by secure protocol. Does not work with the download_ssh flag [env: GTLBSTR_DOWNLOAD_FORCE_HTTPS=]
      --upload-force-http
          Force upload repositories by insecure protocol. Does not work with the upload_ssh flag [env: GTLBSTR_UPLOAD_FORCE_HTTP=]
      --upload-force-https
          Force upload repositories by secure protocol. Does not work with the upload_ssh flag [env: GTLBSTR_UPLOAD_FORCE_HTTPS=]
      --disable-hierarchy
          Disable saving the directory hierarchy [env: GTLBSTR_DISABLE_HIERARCHY=]
      --clear-dst
          Clear dst path before cloning [env: GTLBSTR_CLEAR_DST=]
      --only-master
          Download only default branch [env: GTLBSTR_ONLY_MASTER=]
      --disable-sync-date
          Disable adding sync dates in project descriptions [env: GTLBSTR_DISABLE_SYNC_DATE=]
      --gitlab-timeout <GITLAB_TIMEOUT>
          Timeout for requests to GitLab instances in seconds [env: GTLBSTR_GITLAB_TIMEOUT=]
  -h, --help
          Print help
  -V, --version
          Print version

Предупреждение

Пустые проекты не будут перенесены. Так как, их невозможно склонировать через git, пока в этих проектах не будет создано ни одной ветки (issue 37).

Аналоги