Skip to content

Конфиг и поиск репозиториев

Откуда CLI берёт список пакетов, и как добавлять в него репозитории без ручного редактирования JSON.

setup

Интерактивное меню для самого конфиг-файла. Показывает текущие списки roots и packages с пометками ✓ exists / ✗ not found (а для packages ещё и ! no package.json/.git here, если папка существует, но не является пакетом), и позволяет добавить директорию-root или директорию-package, отредактировать существующую запись или удалить её (с подтверждением).

bash
polyrepo setup

Путь не проверяется строго — добавление ещё не существующего пути просто печатает предупреждение, на случай если папка появится позже. Изменения записываются на диск только при выборе «Save and exit»; «Discard changes and exit» отбрасывает всё сделанное за сессию.

Пример вывода — текущее состояние, прямо перед самим меню:

Configure package sources

Editing: C:\work\NPM\polyrepo.config.json

roots (subfolders are scanned as packages)
  1. C:\work\NPM  ✓ exists

packages (the folder itself is the package)
  (none)

? What do you want to do?

Опции

--config <path>

Редактировать конфиг-файл, отличный от файла по умолчанию рядом с самим CLI.

Пример:

bash
polyrepo setup --config "/path/to/polyrepo.config.json"

clone

Сверяет список репозиториев GitHub-организации/пользователя с тем, что уже склонировано под одной root-директорией, и клонирует недостающее.

bash
polyrepo clone --org <name> [options]
  1. gh repo list <org> — все репозитории под этой организацией/пользователем (архивные пропускаются по умолчанию).
  2. Сравнивает имена с директориями, уже найденными под целевым root (--root, либо первая запись roots в конфиге, если не указано).
  3. Показывает чекбокс недостающих (все отмечены по умолчанию), затем клонирует каждый выбранный git clone в целевой root, один за другим.

--org обязателен и не сохраняется в конфиге — roots/packages конфига описывают где локально лежат репозитории, а не с какого GitHub-аккаунта они пришли.

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

Clone missing repos from my-github-org

Target root: C:\work\NPM

? Pick repos to clone into C:\work\NPM:
    vue-command-palette
    vue-toast-kit

[1/2] vue-command-palette
  $ git clone https://github.com/my-github-org/vue-command-palette.git C:\work\NPM\vue-command-palette
  ✓ Cloned into C:\work\NPM\vue-command-palette.

[2/2] vue-toast-kit
  $ git clone https://github.com/my-github-org/vue-toast-kit.git C:\work\NPM\vue-toast-kit
  ✓ Cloned into C:\work\NPM\vue-toast-kit.

Опции

--org <name>

GitHub-организация или пользователь, чей список репозиториев нужно получить. Обязательный параметр.

--root <path>

Root-директория для клонирования. По умолчанию — первая запись roots в конфиге.

--include-archived

Также предлагать архивные репозитории (по умолчанию пропускаются).

--packages <a,b,c>

Предложить только эти имена репозиториев, без интерактивного чекбокса.

--yes

Пропустить подтверждение «proceed?».

--dry-run

Напечатать, что было бы склонировано, без реального клонирования.

Пример:

bash
polyrepo clone --org my-github-org --root "C:\work\NPM" --yes