zoryn gitery¶
zoryn gitery — обёртка над gitery, git-хостингом ALT Linux: просмотр репозиториев, истории коммитов, дерева и содержимого файлов, а также административные операции, для которых раньше приходилось вручную вызывать ssh gitery <verb>.
Два бэкенда¶
Команды чтения (ls, find-package, log, commit, diff, refs, branches, tags, tree, cat) обращаются к HTTP API gitoskop (по умолчанию https://git.altlinux.org/gitoskop/api) — он быстрее, чем SSH. ls и find-package при неудачном запросе к API откатываются на ssh gitery ls / ssh gitery find-package, предварительно выводя предупреждение. Для ls откат срабатывает только для корней, доступных ssh ls (people, gears, srpms); для gitoskop-only корней вроде tasks (и виртуального packages) выводится сама ошибка gitoskop, а не сбивающее с толку сообщение ssh «not in allowed tree».
Все остальные команды (quota, clone, charset, default-branch, init-db, repack, mv-db, rm-db) работают через ssh gitery <verb> — либо потому что им нужен доступ на запись, либо потому что у gitoskop нет соответствующего эндпоинта.
Адресация репозиториев¶
Каждая подкоманда с аргументом REPO (или DIR/SRC/DST) резолвит его одинаково:
- Короткое имя (без
/, напримерdune) разворачивается вpeople/<login>/packages/<name>, где<login>берётся из[gitery] loginв~/.zoryn. Для коротких имён без заданногоloginкоманда завершается ошибкой. - Без
-nаргумент с/внутри воспринимается как полный путь от корня сервера (например,people/iv/packages/dune.gitилиpackages/gears/d/dune). - Ведущий
/всегда означает абсолютный путь от корня: он отбрасывается, а любой-nигнорируется (запасной вариант для полностью заданного пути, например-n packages /people/x/yдаётpeople/x/y). -n/--namespace NSделаетNSродителем для любого относительного аргумента (без ведущего/) — как короткого имени, так и многосегментного подпути:-n gears/dсdune→gears/d/dune.git, а-n packagesсgears/k→packages/gears/k. Он заменяет родителя по умолчаниюpeople/<login>/packagesиloginне требует.
Для команд, работающих с репозиторием, — все подкоманды выше, кроме ls, init-db и mv-db, — резолвер добавляет суффикс .git, если его ещё нет, независимо от того, было ли имя коротким, задано через -n, или указано полным путём с /: dune превращается в people/<login>/packages/dune.git, а /people/x/packages/bar — в people/x/packages/bar.git. Единственное исключение — gear-репозиторий задания tasks/<id>/gears/<n>/git, каталог которого называется просто git: он остаётся как есть, чтобы не превратиться в нерабочий git.git. Команды ls, init-db и mv-db работают с обычными каталогами на сервере и .git никогда не добавляют.
Пейджинг¶
Когда stdout — терминал, форматированный (человекочитаемый) вывод команд чтения (ls, log, commit, diff, refs, branches, tags, tree, find-package) показывается через пейджер ($PAGER, по умолчанию less), как в git. Вывод, помещающийся на экран, печатается сразу и управление возвращается без ожидания; при пайпе или перенаправлении (| cat, > file) вывод идёт напрямую, без пейджера. Тело --json не пейджится и остаётся машиночитаемым. (cat печатает сырое содержимое файла напрямую и не пейджится.)
Вывод в JSON¶
Каждая команда чтения принимает --json — печатает необработанное тело ответа gitoskop API вместо стандартного форматированного вывода. У cat флага --json нет — она всегда печатает сырое содержимое файла.
Отладочный вывод¶
Каждая подкоманда принимает -d/--debug — печатает в stderr каждый отправляемый запрос: URL HTTP-запросов GET для чтения через API и SSH-команды для серверных операций. Помогает увидеть, в какой именно путь разворачивается короткое имя:
$ zoryn gitery log xfsprogs --limit 1 -d
gitery: GET https://git.altlinux.org/gitoskop/api/people/<login>/packages/xfsprogs.git
gitery: GET https://git.altlinux.org/gitoskop/api/people/<login>/packages/xfsprogs.git/log/sisyphus?limit=1
Подтверждение для изменяющих команд¶
init-db, repack, mv-db, rm-db, а также charset/default-branch при задании значения для установки запрашивают подтверждение перед выполнением, если не передан -y/--yes. charset/default-branch без значения (режим чтения) подтверждения не требуют. В неинтерактивной сессии (нет TTY) без --yes команда не выполняется молча со значением по умолчанию "нет", а завершается с предупреждением.
Автодополнение¶
При установленном автодополнении оболочки gitery дополняет данные прямо с сервера:
- аргумент REPO/PATH дополняет короткое имя через поисковый API gitoskop (
zoryn gitery log xfspr<TAB>→people/<login>/packages/xfsprogs.git), а как только введён/или задан namespace через-n— навигирует по дереву сервера посегментно (zoryn gitery ls -n tasks 426<TAB>→426179/,426180/, … затем426180/ge<TAB>→426180/gears/и так далее до репозитория). Подкаталоги дополняются с завершающим/, чтобы следующий сегмент дополнялся без пробела; - аргумент REF (
log,tree,cat,default-branch) дополняется ветками и тегами репозитория, уже указанного в строке; -n/--namespaceдополняется корневыми метками верхнего уровня, запрашиваемыми у API gitoskop на лету (сейчасpackages,people,tasks).
Дополнение работает по возможности и с коротким таймаутом, поэтому не подвешивает оболочку, если API отвечает медленно или недоступен.
Конфигурация¶
Подробности и значения по умолчанию — в конфигурации.
Просмотр репозиториев (API gitoskop)¶
zoryn gitery ls¶
Список каталога (по умолчанию: people/<login>/packages) либо содержимого репозитория, если путь заканчивается на .git.
Для каталога у каждого репозитория выводится размер на диске и дата последнего коммита; подкаталоги показываются с завершающим / без размера и даты:
Для пути на .git показывается дерево файлов репозитория на ветке по умолчанию (тот же вывод, что и zoryn gitery tree <repo> <ветка-по-умолчанию>); чтобы зайти в подкаталог, допишите путь после .git:
$ zoryn gitery ls people/iv/packages/dune.git
drwxr-xr-x - .gear
-rw-r--r-- 258 bytes meson.build
drwxr-xr-x - src
$ zoryn gitery ls people/iv/packages/dune.git/.gear
-rw-r--r-- 9 KB dune.spec
-rw-r--r-- 118 bytes rules
Путь, который оказывается репозиторием даже без суффикса .git (например, gear-репозиторий задания tasks/<id>/gears/<n>/git), тоже распознаётся и показывается деревом, а не ошибкой.
По умолчанию листинг каталога сохраняет порядок сервера. -S/--sort пересортирует его по одному ключу — name, size или date (последний коммит), а -r/--reverse меняет порядок на убывающий:
zoryn gitery ls --sort=size # сначала самые маленькие репозитории
zoryn gitery ls --sort=size --reverse # сначала самые большие
zoryn gitery ls -S date people/iv/packages # сначала самый старый последний коммит
Сортировка действует только на человекочитаемый вывод; --json всегда возвращает порядок API как есть.
zoryn gitery ls
zoryn gitery ls people/iv/packages
zoryn gitery ls people/iv/packages/dune.git
zoryn gitery ls people/iv/packages/dune.git/.gear
zoryn gitery ls --json people/iv/packages
-n,--namespace=NS— родительское пространство имён для коротких имён.-S,--sort=KEY— упорядочить листинг каталога поname,sizeилиdate.-r,--reverse— сортировать по убыванию (сначала самые большие, новые или последние).--json— вывести сырой JSON API.
zoryn gitery find-package¶
Поиск путей репозиториев gitery по шаблону.
zoryn gitery find-package dune
zoryn gitery find-package -n packages dune
zoryn gitery find-package --json dune
-n,--namespace NS— ограничить результаты путями репозиториев подNS/…(например,packages,people,tasks) — те же корни, что и уgitery ls -n.--json— вывести сырой JSON API.
API gitoskop возвращает не более 200 совпадений за один запрос. Для широких шаблонов, под которые подходит больше, zoryn подгружает следующую страницу по мере прокрутки в пейджере — так доступен весь список, без обрезки до 50 на стороне сервера, вплоть до клиентского предела в 10 000 совпадений. Если под шаблон подходит больше, после закрытия пейджера выводится строка showing N of TOTAL matches (capped at 10000). С --json собранные из всех страниц результаты выдаются одним объектом { "results": [...], "total": N }.
-n/--namespace фильтрует на стороне клиента (у API поиска нет параметра пространства имён): zoryn просматривает совпадения и оставляет те, что лежат под выбранным корнем. Если пространство имён задано и просмотр упёрся в клиентский предел, строка примет вид scanned N of TOTAL matches (capped at 10000); M under NS.
zoryn gitery log¶
История коммитов репозитория, достижимых из REF. Если REF не указан, используется ветка по умолчанию (символическую ссылку HEAD API не разрешает). Каждый коммит выводится в стиле git log — полный oid, автор, дата и тема. Ссылки, указывающие на коммит, показываются в скобках после oid, как git log --decorate (HEAD -> master, tag: …):
commit 55fd7f35ca4fbd8d4493dacc90f6d3a716c16ab0 (HEAD -> master, tag: 1.5.2-alt1)
Author: Dmitrii Fomchenkov <sirius@altlinux.org>
Date: 2026-07-21
- new version
С --oneline каждый коммит — одна строка <короткий-oid> <тема>, вместе с декорациями (как git log --oneline --decorate):
55fd7f35ca (HEAD -> master, tag: 1.5.2-alt1) - new version
9e5f096ae5 Merge tag 'v1.5.2' into sisyphus
В терминале история подсвечивается, как git log --decorate: oid — жёлтым, HEAD — голубым, ветки — зелёным, теги — жёлтым, — и показывается через пейджер (см. раздел «Пейджинг» выше). При выводе в канал или файл, а также при установленной переменной NO_COLOR, подсветка отключается.
-n,--namespace=NS— родительское пространство имён для коротких имён.--oneline— одна строка<короткий-oid> <тема>на коммит.--limit=N— максимальное число коммитов.--offset=N— сколько коммитов пропустить.--json— вывести сырой JSON API.
zoryn gitery commit¶
Показать один коммит: заголовок, родителей и diff-stat по файлам.
-n,--namespace=NS— родительское пространство имён для коротких имён.--json— вывести сырой JSON API.
zoryn gitery show¶
Показать один коммит в стиле git show: заголовок и полное сообщение коммита, затем unified diff относительно первого родителя. REV — это oid коммита, тег или ветка; если не указан, берётся ветка репозитория по умолчанию (символическую ссылку HEAD API не разрешает).
commit a6b64c15dede3e7573443442a2a1687b4ff5c915
Author: Anton Farygin <rider@altlinux.org>
Date: 2026-06-27
3.24.0-alt1
- 3.23.1 -> 3.24.0
diff --git a/.gear/dune.spec b/.gear/dune.spec
--- a/.gear/dune.spec
+++ b/.gear/dune.spec
@@ -31,7 +31,7 @@
-Version: 3.23.1
+Version: 3.24.0
В терминале заголовок подсвечивается как git log --decorate, а патч — как git diff, и всё показывается через пейджер (см. раздел «Пейджинг» выше); при выводе в канал или файл, а также при установленной переменной NO_COLOR, подсветка отключается.
-n,--namespace=NS— родительское пространство имён для коротких имён.--json— вывести сырой JSON API.
zoryn gitery diff¶
Показать сводку diff-stat по файлам либо сырой патч для диапазона коммитов.
--patch печатает unified diff вместо сводки diff-stat. В терминале он подсвечивается точно как git diff — meta-строки файла и индекса полужирным, заголовки ханков голубым, добавления зелёным, удаления красным, — и показывается через пейджер (см. раздел «Пейджинг» выше); при выводе в канал или файл, а также при установленной переменной NO_COLOR, подсветка отключается. Если заданы оба флага, --patch имеет приоритет: печатается патч, а --json игнорируется.
-n,--namespace=NS— родительское пространство имён для коротких имён.--patch— показать сырой unified diff вместо сводки по файлам.--json— вывести сырой JSON API.
zoryn gitery refs¶
Список всех ссылок (веток и тэгов) репозитория.
-n,--namespace=NS— родительское пространство имён для коротких имён.--json— вывести сырой JSON API.
zoryn gitery branches¶
Список веток репозитория.
-n,--namespace=NS— родительское пространство имён для коротких имён.--json— вывести сырой JSON API.
zoryn gitery tags¶
Список тэгов репозитория.
-n,--namespace=NS— родительское пространство имён для коротких имён.--json— вывести сырой JSON API.
zoryn gitery tree¶
Элементы дерева по пути внутри ref (путь по умолчанию — корень репозитория). Для каждого элемента показывается режим в стиле ls -l и имя; размеры файлов выводятся как -, поскольку API не сообщает размеры по элементам.
-n,--namespace=NS— родительское пространство имён для коротких имён.--json— вывести сырой JSON API.
zoryn gitery cat¶
Печать сырого содержимого файла. REF необязателен — без него читается ветка репозитория по умолчанию:
zoryn gitery cat dune Makefile # ветка по умолчанию
zoryn gitery cat dune sisyphus Makefile # явный ref
Два позиционных аргумента трактуются как REPO PATH, три — как REPO REF PATH.
-n,--namespace=NS— родительское пространство имён для коротких имён.
Администрирование сервера (SSH)¶
zoryn gitery quota¶
Показать дисковую квоту вызывающего пользователя на gitery.
zoryn gitery clone¶
Клонировать репозиторий на сервере gitery (клонирование на стороне сервера, не локальный git clone).
-n,--namespace=NS— родительское пространство имён для коротких имён.
zoryn gitery charset¶
Без CHARSET — вывести текущую кодировку репозитория. С CHARSET — установить её (запрашивает подтверждение, если не задан --yes).
-n,--namespace=NS— родительское пространство имён для коротких имён.-y,--yes— пропустить подтверждение (актуально только при установке).
zoryn gitery default-branch¶
Без BRANCH — вывести текущую ветку по умолчанию репозитория. С BRANCH — установить её (запрашивает подтверждение, если не задан --yes).
-n,--namespace=NS— родительское пространство имён для коротких имён.-y,--yes— пропустить подтверждение (актуально только при установке).
zoryn gitery init-db¶
Создать новый bare-репозиторий на сервере gitery (запрашивает подтверждение, если не задан --yes).
-n,--namespace=NS— родительское пространство имён для коротких имён.-y,--yes— пропустить подтверждение.
zoryn gitery repack¶
Репак репозитория на сервере gitery, опционально с дополнительным параметром (запрашивает подтверждение, если не задан --yes).
-n,--namespace=NS— родительское пространство имён для коротких имён.-y,--yes— пропустить подтверждение.
zoryn gitery mv-db¶
Переместить/переименовать каталог репозитория на сервере gitery (запрашивает подтверждение, если не задан --yes).
-n,--namespace=NS— родительское пространство имён для коротких имён.-y,--yes— пропустить подтверждение.
zoryn gitery rm-db¶
Безвозвратно удалить репозиторий с сервера gitery (запрашивает подтверждение, если не задан --yes). Отменить это действие невозможно.
-n,--namespace=NS— родительское пространство имён для коротких имён.-y,--yes— пропустить подтверждение.