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

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

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

Настройка

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

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

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

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

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

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

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

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

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

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

$ ssh git.alt init-db test
Initialized empty Git repository in ./
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/
$

Закоммитить в него нужное содержимое и отправить на git.alt[4]:

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

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

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

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

[remote "origin"]
       url = ssh://git.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 p5 5.1 5.0 4.1 4.0

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

$ git checkout -b M51
$ $EDITOR test.spec
$ git commit -a -m "test-0.1-alt0.M51.1"
$ git tag -s -m "test-0.1-alt0.M51.1" test-0.1-alt0.M51.1
$ git push origin --tags

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

$ ssh git.alt build -b 5.1 packages/test.git test-0.1-alt0.M51.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 packages/test.git test-0.1-alt1
$ ssh git.alt task add repo packages/test2.git test2-0.1-alt1

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

$ ssh git.alt task run

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

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

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

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

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

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

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

ssh git.alt task ls

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

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

$ ssh git.alt task new 5.1
$ ssh git.alt task add del linuxwacom
$ ssh git.alt task run

Примечания

  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
  7. См. тж. gear-create-tag(1)