git.alt/Краткое руководство

Материал из ALT Linux Wiki

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

Настройка

Убедитесь, что ваш SSH-ключ зарегистрирован принимающими в команду, и проведите настройку в соответствии с описанием в справочнике.

С 01.08.2015г Для работы с git репозиторием надо настроить доступ к двум серверам : gitery.altlinux.org (gitery) и git.altlinux.org (girar), поэтому дальнейшая часть статьи требует корректировки. Ссылка: [devel] I: git.alt ssh interface split.


Дальнейшая инструкция подразумевает, что ssh-клиент настроен в соответствии с описанием в справочнике по git.alt, в частности, в конфигурационном файле ~/.ssh/config есть хосты с именами git.alt и gitery.alt.

Клонирование чужого репозитория для работы над ним

Для поиска репозиториев используется команда find-package (результатов может быть и больше):

$ ssh gitery.alt find-package bugzilla
/people/vvk/packages/bugzilla.git	1168522087
$

Склонировать репозиторий можно с помощью команды clone:

$ ssh gitery.alt clone /people/vvk/packages/bugzilla.git
Initialized empty Git repository in /people/dottedmag/packages/bugzilla.git/
$

Эта команда создаст вашу копию репозитория на сервере git.alt. Для работы с ним необходимо склонировать этот репозиторий на локальную машину[1]:

$ git clone gitery.alt:packages/bugzilla.git
Initialized empty Git repository in /home/dottedmag/bugzilla/.git/
....
$

Создание нового репозитория и работа над ним

Создать свой репозиторий на git.alt очень просто[2]:

$ ssh gitery.alt init-db test
girar-init-db:	/people/dottedmag/packages/test.git
$

Поскольку в созданном репозитории нет ни одного коммита, то git clone будет ругаться при попытке его склонировать. Поэтому дальше необходимо создать пустой локальный репозиторий.[3]:

$ mkdir test; cd test; git init
Initialized empty Git repository in /home/dottedmag/test/.git/
$

Затем нужно закоммитить в него нужное содержимое (например, файл README) и отправить на gitery.alt[4]:

$ touch README
$ git add README
$ git commit -m 'first commit'
$ git remote add origin gitery.alt:packages/test.git
$ git push origin master
...
$

Подробное пояснение действий:

  • Создаётся файл README
    touch README
  • Файл добавляется в список изменённых файлов для фиксирования (коммита) в локальный git-репозиторий
    git add README
  • Происходит фиксация изменений в текущей ветке (бранче, по умолчанию master) локального git-репозитория с комментарием
    git commit -m 'first commit'
  • Связывается локальный git-репозиторий с удалённым git-репозиторием, расположенным на gitery.alt:packages/test.git, притом удалённый git-репозиторий в локальном репозитории получает имя origin
    git remote add origin gitery.alt:packages/test.git
  • Добавляется ветка master и все изменения, зафиксированные в ней, в удалённый репозиторий с именем origin
    git push origin master

Указание локального имени удалённого репозитория origin и бранча master в команде push необходимо только в первый раз для создания бранча master в удалённом репозитории. git remote add создаёт в конфиг-файле локального репозитория[5] запись, подобную такой:

[remote "origin"]
       url = ssh://gitery.alt/people/dottedmag/packages/test.git
       fetch = +refs/heads/*:refs/remotes/origin/*

И поэтому в дальнейшем git push будет отправлять в удалённый репозиторий все локальные ветки (refs/heads/*), по названию соответствующие удалённым (refs/remotes/origin/*).

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

Создаём подписанный тэг (при установленном пакете gear вместо git tag удобней воспользоваться gear-create-tag):

$ git tag -s -m "test-0.1-alt1" test-0.1-alt1
$ git push origin --tags

Отправляем пакет на сборку в Сизиф:

$ ssh git.alt build packages/test.git test-0.1-alt1

Обратите внимание: тэг, предназначенный для сборки, фиксируется в момент добавления подзадания. Если в исходном репозитории тэг с этим именем потом изменился, то в задании сборочный тэг останется прежним. Если требуется изменить сборочный тэг в задании, то придётся удалить прежнее подзадание и добавить новое.

Сборка пакета в другие поддерживаемые репозитории

Помимо Сизифа пакет можно отправить в другой репозиторий; например, branch/5.1.

Cписок репозиториев можно получить с помощью команды ssh git.alt task new --help. Пример:

$ ssh git.alt task new --help
usage: girar-task new [<binary_repository_name>]
Valid repositories are: sisyphus t6 p6 c6 p5 5.1 5.0 4.1 4.0

Отдельным локальным бранчем (например, t6) оформляем спек согласно backports policy, коммитим[6] и создаём подписанный тэг[7]:

$ git checkout -b t6
$ $EDITOR test.spec
$ git commit -a -m "test-0.1-alt0.M60T.1"
$ git tag -s -m "test-0.1-alt0.M60T.1" test-0.1-alt0.M60T.1
$ git push test-0.1-alt0.M60T.1

Отправляем пакет на сборку:

$ ssh git.alt build -b t6 packages/test.git test-0.1-alt0.M60T.1

Сборка группы пакетов

Создаём подписанные тэги для репозиториев:

$ cd test
$ git tag -s -m "test-0.1-alt1" test-0.1-alt1
$ git push origin --tags
$ cd ../test2
$ git tag -s -m "test2-0.1-alt1" test2-0.1-alt1
$ git push origin --tags

Создаём задачу для сборки:

$ ssh git.alt task new

Добавляем репозитории и тэги:

$ ssh git.alt task add repo test.git test-0.1-alt1
$ ssh git.alt task add repo test2.git test2-0.1-alt1

Запускаем задачу:

$ ssh git.alt task run

Альтернативно, вместо последовательности команд task new, task add и task run создать и отправить задание на сборку можно так:

$ ssh git.alt build test.git test-0.1-alt1 test2.git test2-0.1-alt1

Перекладывание (копирование) собранного пакета

Этот пример демонстрирует копирование пакета из Sisyphus в t6/branch:

$ ssh git.alt task new t6
$ ssh git.alt task add copy update-kernel sisyphus
$ ssh git.alt task run

При копировании пакетов из Sisyphus существует более простой способ добиться того же результата:

$ ssh git.alt build -b t6 copy update-kernel

Результат сборки

Результат выполнения задания вы можете посмотреть на

http://git.altlinux.org/tasks/<TASK>/build/

где <TASK> — номер присвоенного задания. Или статус собственных задач на git.alt:

ssh git.alt task ls

Удаление пакета

Осуществляется путем создания задания с запросом на удаление. Пример:

$ ssh git.alt build -b t6 del linuxwacom

Примечания

  1. См. тж. girar-clone(1) из пакета girar-utils
  2. Удалить ненужный: ssh git.alt rm-db test
  3. Некоторые рекомендуют собирать их под ~/git/
  4. См. тж. girar-upload(1)
  5. .git/config
  6. См. тж. gear-commit(1)
  7. См. тж. gear-create-tag(1)