git.alt/Справочник

Материал из ALT Linux Wiki
< Git.alt
Версия от 00:38, 9 февраля 2009; 195.4.172.164 (обсуждение) (Отмена правки 8994 участника 195.4.172.164 (обсуждение) Блин. Этож не git...)

Эта страница документирует команды git.alt, но не является кратким руководством или учебником по нему.

Как воспользоваться git.alt?

git.alt предоставляет несколько видов доступа:

  • ssh-доступ. Предоставляет несколько команд: для поиска репозиториев, их клонирования, создания, удаления, а также служебных.
  • ssh-, git-, rsync-, http-доступ для непосредственной работы с репозиториями.
    git-, rsync- и http-адреса предоставляют r/o доступ, ssh — r/w.
  • Web-интерфейс. Находится по адресу 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

$ 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 пакетов

Смотри ACL для общей информации об ACL пакетов в Sisyphus.

Команда acl требует указания репозитория, над которым производится работа. На данный момент существует только репозиторий Sisyphus с меткой sisyphus.

Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:

$ ssh git.alt acl sisyphus keyjnote
girar-acl: Go ahead and type your commands
keyjnote add peet
keyjnote add raorn
^D
girar-acl: 2 command(s) queued
$

Все команды, меняющие состав группы или ACL пакета, могут производиться только лидером — первым в списке ACL пакета или в составе группы. Все такие операции выполняются асинхронно и результат их выполнения сообщается по email.

acl show

$ ssh git.alt acl <binary repository> <package> show

Показывает ACL указанного пакета

$ ssh git.alt acl sisyphus bugzilla show
bugzilla       @nobody
$ ssh git.alt acl <binary repository> @<group> show

Показывает состав указанной группы майнтайнеров.

$ ssh git.alt acl sisyhpus @python show
@python        ns ldv george akhavr bga lav swi at hiddenman sin mithraen kas

acl check

$ ssh git.alt acl <binary repository> <package> check

Проверяет ACL указанного пакета

$ ssh git.alt acl sisyphus bugzilla check
girar-check-perms: access to bugzilla ALLOWED for ldv: project is orphaned

acl add/del

$ ssh git.alt acl <binary repository> <package> add|del <login>|@<group> ...

Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета.

$ ssh git.alt acl sisyphus keyjnote add damir
girar-acl: 1 command(s) queued
$ ssh git.alt acl sisyphus keyjnote del damir
girar-acl: 1 command(s) queued
$ ssh git.alt acl <binary repository> @<group> add|del <login>|@<group> ...

Добавляет/удаляет указанных пользователей и группы в/из указанной группы.

$ ssh git.alt acl sisyphus ns add @python
girar-acl: 1 command(s) queued
$ ssh git.alt acl sisyphus ns del @python
girar-acl: 1 command(s) queued

acl replace

$ ssh git.alt acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>

Заменяет указанную запись в ACL пакета или составе группы на вторую указанную.

$ ssh git.alt acl sisyphus keyjnote replace dottedmag @python

Заменяет в ACL пакета keyjnote запись dottedmag на @python.

acl leader

$ ssh git.alt acl <binary repository> <package> leader <login>|@<group>

Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды.

$ ssh git.alt acl sisyphus keyjnote leader @python
$ ssh git.alt acl <binary repository> @<group> leader <login>|@<group>

Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды.

$ ssh git.alt acl sisyphus @python leader ns

acl nmu

$ ssh git.alt acl <binary repository> <package> nmu add|del [<login> [<start date> [<end date>]]]

Выдаёт/снимает разрешение на проведение NMU указанного пакета.

Параметры:

  • login — аккаунт, которому даётся разрешение на NMU. * или отсутствие параметра означает «кому угодно»
  • start date — дата начала действия NMU, в формате unixtime. Отсутствие параметра означает «немедленно»
  • end date — дата окончания действия NMU, в формате unixtime. Отсутствие параметра означает «никогда».

Удаление разрешения происходит по точному соответствию имени аккаунта, так что del * не приведёт к отмене всех NMU, выданных на пакет. С другой стороны, del user приведёт к отмене всех NMU, выданных данному пользователю.

$ ssh git.alt acl <binary repository> <package> nmu show

Выдаёт список NMU для указанного пакета, в формате

<package> <login> <start date> <end date>

0 в поле end date означает «без ограничения».

Сборка пакетов из gear

Для сборки пакетов используется механизм задач — пользователь указывает, какие gear-репозитории необходимо собрать одной транзакцией, создавая задачу, после чего запускает её на выполнение. Задачи выполняются асинхронно. После завершения задачи пользователю приходит отчёт по e-mail.

task

$ ssh git.alt task ls [--all]

Показывает текущий список всех задач пользователя с указанием их статуса и краткого содержания.
С указанием параметра --all показывает список задач всех пользователей.

$ ssh git.alt task new [<binary_repository_name>]

Создаёт новую задачу для сборки пакетов в указанный репозиторий (по умолчанию - Sisyphus).
Список репозиториев можно узнать с помощью task new --help.
Данная команда выводит идентификатор задачи на stdout.

$ ssh git.alt task rm [<task_id>]

Удаляет указанную (по умолчанию последнюю созданную) задачу.

$ ssh git.alt task show [<task_id>]

Показывает содержимое указанной (по умолчанию последней созданной) задачи.

$ ssh git.alt task add [<task_id>] repo <gear_repo> <gear_tag>

Добавляет в задачу пакет, который необходимо собрать.
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тэга.

$ ssh git.alt task add [<task_id>] copy <package> [<binary_repository_name>]

Добавляет в задачу имя пакета, который необходимо скопировать из другого репозитория (по умолчанию - Sisyphus).

$ ssh git.alt task add [<task_id>] del <package>

Добавляет в задачу имя пакета, который необходимо удалить.

$ ssh git.alt task share [<task_id>] <status|enabled|disabled>

Показывает или изменяет режим доступа к указанной (по умолчанию последней созданной) задаче.
Задача с режимом доступа share enabled может быть дополнена другими пользователями с помощью команды task add.
По умолчанию задачи создаются в режиме доступа share disabled.

$ ssh git.alt task run [<task_id>]

Отправляет на выполнение указанную (по умолчанию последнюю созданную) задачу.

$ ssh git.alt task approve <task_id> <repo_number>

Подтверждает сборку из репозитория с указанным номером, входящего в состав указанной чужой задачи.
Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU).

Пример:

$ ssh git.alt task ls
girar-task ls: no tasks for ldv
$ ssh git.alt task new
1234
new task #1234: owner=ldv repo=sisyphus
$ ssh git.alt task ls
#1234 NEW sisyphus
$ ssh git.alt task show
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=
$ ssh git.alt task add repo vitmp 1.0-alt4
task #1234: added #1 build tag 1.0-alt4 from /people/ldv/packages/vitmp.git
$ ssh git.alt task show
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=
 1:dir=/people/ldv/packages/vitmp.git
 1:tag_name=1.0-alt4
 1:tag_id=11c24aa6683506efd89b174de8dbea2af1cebf84
 1:tag_author=Dmitry V. Levin (for packages) <ldv@altlinux.org>
 1:userid=ldv
$ ssh git.alt task run
task #1234: seq=0 queued, result will be emailed to ldv@altlinux.org
$ ssh git.alt task ls
#1234 AWAITING sisyphus vitmp.git=1.0-alt4

через некоторое время вывод последней команды изменится на

#1234 BUILDING [locked] sisyphus vitmp.git=1.0-alt4

а ещё через некоторое время - на

#1234 DONE sisyphus vitmp.git=1.0-alt4

build

$ ssh git.alt build [-b <binary_repository_name>] <gear_repo_path 1> <gear_tag_name 1> ...

Эта команда создаёт задачу по сборке указанных пакетов и отправляет её на выполнение, последовательно запуская task new, task add и task run.
Параметр binary repository name имеет тот же смысл, что и в команде task new.
Параметры gear repo path и gear tag name имеют тот же смысл, что и в команде 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%7Cpublic)/$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%7Cpackages%7Cpublic%7Cprivate)/$PACKAGE.git

HTTP- и git-URL-ы репозиториев можно в любой момент узнать в web-интерфейсе git.alt.

Web-интерфейс

Располагается по адресу http://git.altlinux.org/

Предоставляет навигацию по публичным репозиториям пользователей (директории /people/$USERNAME/{packages,public}) и gitweb-интерфейс к этим репозиториям.

Кроме этого, в web-интерфейсе представлены репозитории /archive, списки /acl и файл people-packages-list, содержащий все репозитории из директорий /people/$USERNAME/packages и даты их последнего изменения (в unixtime).

Структура репозиториев

git.alt содержит три дерева репозиториев:

  • репозитории /people/$USERNAME для каждого зарегистрированного пользователя
  • репозитории /gears для пакетов Sisyphus, собранных с помощью git.alt.
  • репозитории /archive для пакетов Sisyphus, прошедших incoming.

/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-репозиториями для пакетов Сизифа.

/gears

В этой директории размещаются gear-репозитории пакетов Sisyphus, прошедших сборку через git.alt.

/archive

В этой директории размещаются gear-репозитории пакетов Sisyphus.

Репозиторий для каждого пакета создаётся с помощью утилиты gear-srpmimport на основе прошедших incoming src.rpm-пакетов, а не на основе gear-репозитория, из которых были собраны src.rpm, поэтому репозиторий /archive следует использовать для разработки только в том случае, когда gear-репозиторий для пакета отсутствует.

После первой сборки через git.alt репозиторий из /archive замораживается.

Почтовая подписка

На 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 не допускаются.