Git.alt/Справочник
Материал из ALT Linux Wiki
(→SSH-доступ: добавлен пример) |
(→Как воспользоваться git.alt?: task/build/acl) |
||
Строка 12: | Строка 12: | ||
* SSH-доступ. Предоставляет несколько команд: для поиска репозиториев, их клонирования, создания, удаления, а также служебных. | * SSH-доступ. Предоставляет несколько команд: для поиска репозиториев, их клонирования, создания, удаления, а также служебных. | ||
- | * <tt>ssh</tt>, <tt>git</tt>, <tt>rsync</tt>, <tt>http</tt> | + | * <tt>ssh</tt>, <tt>git</tt>, <tt>rsync</tt>, <tt>http</tt> — доступ для непосредственной работы с репозиториями. <tt>git</tt>, <tt>rsync</tt> и <tt>http</tt>-адреса предоставляют r/o доступ, <tt>ssh</tt> — r/w. |
* Web-интерфейс. Находится по адресу http://git.altlinux.org/, предоставляет навигацию по списку репозиториев и <tt>gitweb</tt> для индивидуальных репозиториев. | * Web-интерфейс. Находится по адресу http://git.altlinux.org/, предоставляет навигацию по списку репозиториев и <tt>gitweb</tt> для индивидуальных репозиториев. | ||
SSH-доступ к <tt>git.alt</tt> выдаётся после [[Join|принятия]] в ALT Linux Team. | SSH-доступ к <tt>git.alt</tt> выдаётся после [[Join|принятия]] в ALT Linux Team. | ||
- | + | == SSH-доступ == | |
- | <tt>git.alt</tt> доступен по SSH по адресу <tt>git.altlinux.org:222</tt>. Аккаунт для | + | <tt>git.alt</tt> доступен по SSH по адресу <tt>git.altlinux.org:222</tt>. Аккаунт для доступа — <tt>git_$USERNAME</tt>, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_». |
Пример <tt>~/.ssh/config</tt>: | Пример <tt>~/.ssh/config</tt>: | ||
Строка 29: | Строка 29: | ||
Для работы [[fsi:SSHFirewall|из-за прокси]] и в других сложных условиях SSH также доступен по адресу <tt>git.altlinux.org:443</tt>. | Для работы [[fsi:SSHFirewall|из-за прокси]] и в других сложных условиях SSH также доступен по адресу <tt>git.altlinux.org:443</tt>. | ||
- | Для работы с <tt>git.alt</tt> необходимо настроить свой <tt>git</tt> | + | Для работы с <tt>git.alt</tt> необходимо настроить свой <tt>git</tt> — параметры <tt>user.name</tt>, <tt>user.email</tt>, <tt>user.signingkey</tt>: |
$ git-config --global user.signingkey "<ID ключа GPG для подписи тэгов>" | $ git-config --global user.signingkey "<ID ключа GPG для подписи тэгов>" | ||
$ git-config --global user.email "<ваш email, как мантейнера>" | $ git-config --global user.email "<ваш email, как мантейнера>" | ||
Строка 55: | Строка 55: | ||
task {list|new|show|drop|add|run} ... | task {list|new|show|drop|add|run} ... | ||
build <path to gear repository> <tag name> [<binary package repository name>] [<project name>] | build <path to gear repository> <tag name> [<binary package repository name>] [<project name>] | ||
+ | acl {--help|<binary package repository name> ...} | ||
$ | $ | ||
Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда. | Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда. | ||
+ | |||
+ | === Управление git-репозиториями === | ||
==== ls ==== | ==== ls ==== | ||
Строка 72: | Строка 75: | ||
$ | $ | ||
- | Без | + | Без параметров — показывает содержимое <tt>/people/$USERNAME</tt>: |
$ ssh git.alt ls | $ ssh git.alt ls | ||
Строка 95: | Строка 98: | ||
'''$ ssh git.alt find-package <pattern>''' | '''$ ssh git.alt find-package <pattern>''' | ||
- | Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в | + | Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в шаблоне — <tt>*</tt>. Репозитории ищутся в директории <tt>packages</tt> каждого пользователя, поскольку предполагается, что <tt>[[gear]]</tt>-репозитории располагаются именно там. |
$ ssh git.alt find-package glibc* | $ ssh git.alt find-package glibc* | ||
Строка 108: | Строка 111: | ||
$ | $ | ||
- | Вторая колонка в выводе <tt>find-package</tt> | + | Вторая колонка в выводе <tt>find-package</tt> — unixtime времени последнего обновления репозитория. |
==== clone ==== | ==== clone ==== | ||
Строка 114: | Строка 117: | ||
'''$ ssh git.alt clone <path to git repository> [<destination directory>]''' | '''$ ssh git.alt clone <path to git repository> [<destination directory>]''' | ||
- | Эта команда позволяет | + | Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним. |
- | Без второго | + | Без второго аргумента — клонирует в директорию <tt>packages</tt>: |
$ ssh git.alt clone /people/ldv/glibc.git | $ ssh git.alt clone /people/ldv/glibc.git | ||
Строка 173: | Строка 176: | ||
$ ssh git.alt rm-db public/test | $ ssh git.alt rm-db public/test | ||
- | ==== | + | === Управление ACL пакетов === |
+ | {{Main|Incoming/acl}} | ||
+ | === Сборка пакетов из [[gear]] === | ||
- | ===== | + | Для сборки пакетов используется механизм ''задач'' — пользователь указывает, какие [[gear]]-репозитории необходимо собрать одной транзакцией, создавая задачу, после чего запускает её на выполнение. Задачи выполняются асинхронно. После завершения задачи пользователю приходит отчёт по e-mail. |
+ | |||
+ | ==== task ==== | ||
+ | |||
+ | '''$ ssh git.alt task list''' | ||
+ | Показывает текущий набор ещё не запущенных задач пользователя. | ||
+ | '''$ ssh git.alt task new [<binary repository>]''' | ||
+ | Создаёт новую задачу для сборки пакетов в указанный репозиторий (по умолчанию - Sisyphus). Данная команда выдаёт идентификатор задачи на stdout. | ||
+ | '''$ ssh git.alt task show <id>''' | ||
+ | Показывает содержимое указанной задачи. | ||
+ | '''$ ssh git.alt task drop <id>''' | ||
+ | Удаляет указанную задачу. | ||
+ | '''$ ssh git.alt task add [<id>] <gear repo path> <tag name> [<project name>]''' | ||
+ | Добавляет в задачу (указанную аргументом или последнюю созданную) пакет, который необходимо собрать. Пакет указывается путём к gear-репозиторию и именем git-тэга. | ||
+ | |||
+ | Пример: | ||
+ | $ ssh git.alt task list | ||
+ | $ ssh git.alt task new | ||
+ | 1227033465 | ||
+ | $ ssh git.alt task list | ||
+ | 1227033465 | ||
+ | $ ssh git.alt task show 1227033465 | ||
+ | user dottedmag | ||
+ | repo sisyphus | ||
+ | $ ssh git.alt task add keyjnote 0.10.2-alt2 | ||
+ | girar-check-perms: allowed: project leader | ||
+ | $ ssh git.alt task show 1227033465 | ||
+ | user dottedmag | ||
+ | repo sisyphus | ||
+ | package keyjnote /people/dottedmag/packages/keyjnote.git 0.10.2-alt2 628b5199c0c0d7640181f2bf7c2e65d4bb3bfa2d sisyphus | ||
+ | $ ssh git.alt task run 1227033465 | ||
+ | Queued #1227033465 | ||
+ | $ | ||
+ | |||
+ | ==== build ==== | ||
+ | |||
+ | '''$ ssh git.alt build <gear repo path> <tag name> [<binary repository>] [<project name>]''' | ||
+ | Эта команда создаёт задачу по сборке указанного пакета и запускает её на выполнение. Параметры ''binary repository'' и ''project name'' имеют тот же смысл, что и в командах <tt>task new</tt> и <tt>task add</tt> соответственно. | ||
+ | |||
+ | === Вспомогательные команды === | ||
+ | |||
+ | ==== charset ==== | ||
'''$ ssh git.alt charset <path to git repository> [<charset>]''' | '''$ ssh git.alt charset <path to git repository> [<charset>]''' | ||
Строка 188: | Строка 234: | ||
$ | $ | ||
- | + | ==== quota ==== | |
'''$ ssh git.alt quota''' | '''$ ssh git.alt quota''' | ||
Строка 199: | Строка 245: | ||
$ | $ | ||
- | + | ==== git-receive-pack, git-upload-pack ==== | |
Эти команды используются утилитами <tt>git-push</tt>, <tt>git-pull</tt> и подобными и не предназначены для вызова пользователем. | Эти команды используются утилитами <tt>git-push</tt>, <tt>git-pull</tt> и подобными и не предназначены для вызова пользователем. | ||
- | |||
- | |||
- | |||
- | |||
=== Клонирование и работа с репозиториями === | === Клонирование и работа с репозиториями === |
Версия 19:02, 18 ноября 2008
Эта страница документирует команды git.alt, но не является кратким руководством или учебником по нему.
Содержание |
Как воспользоваться git.alt?
git.alt предоставляет несколько видов доступа:
- SSH-доступ. Предоставляет несколько команд: для поиска репозиториев, их клонирования, создания, удаления, а также служебных.
- ssh, git, rsync, http — доступ для непосредственной работы с репозиториями. git, rsync и http-адреса предоставляют r/o доступ, ssh — r/w.
- Web-интерфейс. Находится по адресу http://git.altlinux.org/, предоставляет навигацию по списку репозиториев и gitweb для индивидуальных репозиториев.
SSH-доступ к git.alt выдаётся после принятия в ALT Linux Team.
SSH-доступ
git.alt доступен по SSH по адресу git.altlinux.org:222. Аккаунт для доступа — git_$USERNAME, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_».
Пример ~/.ssh/config:
Host git.alt HostName git.altlinux.org Port 222 User git_USERNAME
Для работы из-за прокси и в других сложных условиях SSH также доступен по адресу git.altlinux.org:443.
Для работы с git.alt необходимо настроить свой git — параметры user.name, user.email, user.signingkey:
$ git-config --global user.signingkey "<ID ключа GPG для подписи тэгов>" $ git-config --global user.email "<ваш email, как мантейнера>" $ git-config --global user.name "FirstName LastName"
Например,
$ git-config --global user.signingkey 0xA26F54C8 $ git-config --global user.email dottedmag@altlinux.org $ git-config --global user.name "Mikhail Gusarov"
Список команд выдаётся при ssh-логине без команды или с командой help:
$ ssh git.alt help Available commands: help git-receive-pack <directory> git-upload-pack <directory> charset <path to git repository> [<charset>] clone <path to git repository> [<path to directory>] find-package <pattern> init-db <path to directory> ls [<path to directory>] mv-db <path to source directory> <path to destination directory> quota rm-db <path to git repository> task {list|new|show|drop|add|run} ... build <path to gear repository> <tag name> [<binary package repository name>] [<project name>] acl {--help|<binary package repository name> ...} $
Во всех командах суффикс директорий репозиториев .git опционален и может быть опущен. В выводе команд .git присутствует всегда.
Управление git-репозиториями
ls
$ ssh git.alt ls [<directory>]
Эта команда позволяет посмотреть содержимое различных директорий на git.alt:
$ ssh git.alt ls /people/dottedmag/public total 24 drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git ... drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git $
Без параметров — показывает содержимое /people/$USERNAME:
$ ssh git.alt ls total 16 drwxr-s--- 5 4096 May 30 21:27 etc drwxr-sr-x 14 4096 Aug 13 23:53 packages drwxr-s--x 2 4096 Feb 13 2007 private drwxr-sr-x 8 4096 Aug 13 23:57 public $
От этой же директории отсчитываются относительные пути:
$ ssh git.alt ls public total 24 drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git ... drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git $
find-package
$ ssh git.alt find-package <pattern>
Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в шаблоне — *. Репозитории ищутся в директории packages каждого пользователя, поскольку предполагается, что gear-репозитории располагаются именно там.
$ ssh git.alt find-package glibc* /people/avm/packages/glibc.git 1216320095 ... /people/peet/packages/glibc-kernheaders.git 1177084354 /people/mike/packages/glibc-kvercheck.git 1160664813 $ ssh git.alt find-package glibc /people/avm/packages/glibc.git 1216320095 ... /people/peet/packages/glibc.git 1177084600 $
Вторая колонка в выводе find-package — unixtime времени последнего обновления репозитория.
clone
$ ssh git.alt clone <path to git repository> [<destination directory>]
Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним.
Без второго аргумента — клонирует в директорию packages:
$ ssh git.alt clone /people/ldv/glibc.git Initialized empty Git repository in /people/dottedmag/packages/glibc.git/ $
Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория:
$ ssh git.alt clone /people/ldv/glibc.git public Initialized empty Git repository in /people/dottedmag/public/glibc.git/ $ ssh git.alt clone /people/ldv/glibc.git public/test Initialized empty Git repository in /people/dottedmag/public/test.git/ $
Можно также склонировать репозиторий, находящийся вне git.alt:
$ ssh git.alt clone http://github.com/dottedmag/madshelf.git public Initialized empty Git repository in /people/dottedmag/packages/public.git/ Getting alternates list for http://github.com/dottedmag/madshelf.git ... walk 03d18e21d85fa30fc3ac8d921eb391e2a7bb242a $
init-db
$ ssh git.alt init-db <path to directory>
Позволяет создать новый git-репозиторий. По умолчанию репозиторий создаётся в директории packages:
$ ssh git.alt init-db test Initialized empty Git repository in ./ girar-init-db: /people/dottedmag/packages/test.git
При указании пути создаёт репозиторий по указанному пути:
$ ssh git.alt init-db public/test Initialized empty Git repository in ./ girar-init-db: /people/dottedmag/public/test.git
mv-db
$ ssh git.alt mv-db <path to source directory> <path to destination directory>
Позволяет перемещать и переименовывать свои репозитории. При указании только имени репозитория подразумевается директория packages.
Перемещение packages/test.git в public/newname.git:
$ ssh git.alt mv-db test public/newname $
Перемещение public/newname.git в packages/test.git:
$ ssh git.alt mv-db public/newname test $
Переименовывание packages/test.git в packages/megatest.git:
$ ssh git.alt mv-db test megatest $
rm-db
$ ssh git.alt rm-db <path to git repository>
Позволяет удалять свои репозитории. При указании только имени репозитория подразумевается директория packages:
$ ssh git.alt rm-db megatest # удаляет packages/megatest.git $ ssh git.alt rm-db public/test
Управление ACL пакетов
Сборка пакетов из gear
Для сборки пакетов используется механизм задач — пользователь указывает, какие gear-репозитории необходимо собрать одной транзакцией, создавая задачу, после чего запускает её на выполнение. Задачи выполняются асинхронно. После завершения задачи пользователю приходит отчёт по e-mail.
task
$ ssh git.alt task list
Показывает текущий набор ещё не запущенных задач пользователя.
$ ssh git.alt task new [<binary repository>]
Создаёт новую задачу для сборки пакетов в указанный репозиторий (по умолчанию - Sisyphus). Данная команда выдаёт идентификатор задачи на stdout.
$ ssh git.alt task show <id>
Показывает содержимое указанной задачи.
$ ssh git.alt task drop <id>
Удаляет указанную задачу.
$ ssh git.alt task add [<id>] <gear repo path> <tag name> [<project name>]
Добавляет в задачу (указанную аргументом или последнюю созданную) пакет, который необходимо собрать. Пакет указывается путём к gear-репозиторию и именем git-тэга.
Пример:
$ ssh git.alt task list $ ssh git.alt task new 1227033465 $ ssh git.alt task list 1227033465 $ ssh git.alt task show 1227033465 user dottedmag repo sisyphus $ ssh git.alt task add keyjnote 0.10.2-alt2 girar-check-perms: allowed: project leader $ ssh git.alt task show 1227033465 user dottedmag repo sisyphus package keyjnote /people/dottedmag/packages/keyjnote.git 0.10.2-alt2 628b5199c0c0d7640181f2bf7c2e65d4bb3bfa2d sisyphus $ ssh git.alt task run 1227033465 Queued #1227033465 $
build
$ ssh git.alt build <gear repo path> <tag name> [<binary repository>] [<project name>]
Эта команда создаёт задачу по сборке указанного пакета и запускает её на выполнение. Параметры binary repository и project name имеют тот же смысл, что и в командах task new и task add соответственно.
Вспомогательные команды
charset
$ ssh git.alt charset <path to git repository> [<charset>]
Позволяет узнать или установить кодировку, используемую почтовым клиентом при отправке уведомлений, содержащих цитаты изменений файлов указанного git-репозитория:
$ ssh git.alt charset packages/glibc utf-8 $ ssh git.alt charset packages/glibc cp1252 $ ssh git.alt charset packages/glibc cp1252 $
quota
$ ssh git.alt quota
Позволяет узнать квоту и занимаемое пользователем дисковое пространство.
$ ssh git.alt quota Filesystem blocks quota limit grace files quota limit grace /dev/simfs 16932 977M 1465M 555 100k 150k $
git-receive-pack, git-upload-pack
Эти команды используются утилитами git-push, git-pull и подобными и не предназначены для вызова пользователем.
Клонирование и работа с репозиториями
Работа с git-репозиториями, расположенными на git.alt, ничем не отличается от работы с другими git-репозиториями.
URL-ы репозиториев на git.alt:
- git (r/o)
- git://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git
- rsync (r/o)
- git.altlinux.org::people/$USER/(packages|public)/$PACKAGE.git
- http (r/o)
- http://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git
- ssh (r/w)
- ssh://git.altlinux.org/people/$USER/(etc|packages|public|private)/$PACKAGE.git
HTTP- и git-URL-ы репозиториев можно в любой момент узнать в web-интерфейсе git.alt.
Web-интерфейс
Располагается по адресу http://git.altlinux.org/
Предоставляет навигацию по публичным репозиториям пользователей (директории /people/$USERNAME/{packages,public}) и gitweb-интерфейс к этим репозиториям.
Кроме этого, в web-интерфейсе представлены репозитории /archive (без gitweb, только для клонирования) и файл people-packages-list, содержащий все репозитории из директорий /people/$USERNAME/packages и даты их последнего изменения (в unixtime).
Структура репозиториев
git.alt содержит два дерева репозиториев:
- репозитории /people/$USERNAME для каждого зарегистрированного пользователя
- репозитории /archive для пакетов Sisyphus
/people
Каждому зарегистрированному на git.alt разработчику предоставляется место для git-репозиториев, начинающееся с /people/$USERNAME. Доступ на запись в эти директории даётся только владельцу. Структура для хранения репозиториев жёстко определена:
/people/$USERNAME/etc
Содержит репозитории packages.git, private.git, public.git, с помощью которых можно управлять почтовой подпиской. Эти репозитории доступны на чтение только владельцу.
/people/$USERNAME/packages
Директория предназначена для хранения gear-репозиториев для пакетов Сизифа. Публично доступна.
git-репозитории в этой директории будут искаться при выполнении команды find-package, и эта директория будет использоваться по умолчанию в командах init-db, clone, build.
/people/$USERNAME/private
Директория предназначена для хранения приватных репозиториев, о существовании и содержании которых должно быть известно только самому разработчику.
Для удобства работают прямые http-ссылки на файлы репозиториев, размещённых в этой директории.
/people/$USERNAME/public
Директория предназначен для хранения публичных git-репозиториев, не являющихся gear-репозиториями для пакетов Сизифа.
/archive
В этой директории размещаются gear-репозитории пакетов Sisyphus.
Репозиторий для каждого пакета создаётся с помощью утилиты gear-srpmimport на основе прошедших incoming src.rpm-пакетов, а не на основе gear-репозитория, из которых были собраны src.rpm, поэтому репозиторий /archive следует использовать для разработки только в том случае, когда gear-репозиторий для пакета отсутствует.
Почтовая подписка
На git.alt реализовано два вида почтовой подписки на события:
- Пользователь подписывается на события, происходящие в репозиториях public и packages.
- Пользователь подписывает кого-то на события, происходящие в его репозиториях public, packages и private.
Для подписки используются репозитории из директории etc: packages.git, public.git, private.git. Схема работы с подписками напоминает работу с CVSROOT из CVS: пользователь клонирует нужный репозиторий, коммитит изменения в него и push-ит обратно на сервер, после чего изменения вступают в силу.
В каждом из трёх репозиториев находится два файла: email-subscription и email-distribution (точнее, в private.git - только email-distribution). git.alt использует бранч master и не обращает внимания на остальные бранчи в этих репозиториях.
email-subscription
Этот файл позволяет подписаться на события в публичных репозиториях git.alt. Формат файла - последовательность строк следующего вида:
$USER $PACKAGE $REFTYPE $REFNAME
где
- $USER - имя пользователя git.alt,
- $PACKAGE - имя пакета,
- $REFTYPE - вид изменения: head - новые/удалённые коммиты, tag - новые/удалённые тэги (техническая подробность: второй компонент из изменяемой ссылки refs/*/*)
- $REFNAME - имя изменения: имя бранча для коммитов, имя тэга для тэгов (техническая подробность: третий и последующие компоненты из изменяемой ссылки refs/*/*).
Каждое из полей может быть полным именем или вайлдкардом *. Для имён пакетов также разрешён вайлдкард в конце имени (например, docs-*).
Примеры
Подписка на все события во всех репозиториях:
* * * *
Подписка на новые/удалённые тэги в репозитории /people/ldv/packages/glibc.git:
ldv glibc tag *
email-distribution
Этот файл позволяет подписать других пользователей git.alt на события в ваших репозиториях. Формат файла - последовтельность строк вида:
$PACKAGE $REFTYPE $REFNAME $MAILTO
где
- $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription
- $MAILTO - разделённый запятыми список имён пользователей git.alt - получателей оповещения.
Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются.