UsesGitEtersoft

Материал из Etersoft wiki
Перейти к навигацииПерейти к поиску
Wackowiki-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была автоматически перемещена с old.wiki.etersoft.ru.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Gear + SSH = Girar

Git.Etersoft like Git.ALT

Gear — это Git-репозиторий SRPM-пакета. Girar расположен на ресурсе git.etersoft.ru, организованном аналогично git.altlinux.org, и представляет среду для использования Gear в рамках построения инфраструктуры (

вода про рамки

). По сути Girar — это ряд скриптов на сервере, которые позволяют создавать удалённым пользователям среду для работы со своими Git-репозиториями. Среда, которую предоставляет Girar, достаточно гибка. Но, тем не менее, для её эффективного использования стоит придерживаться определённой политики, которая определяет порядок совместной работы.


Пользователю

Получение аккаунта на git.etersoft.ru.


Пользователю необходимо прописать в ~/.ssh/config строки:


Host    git.eter

        HostName git.etersoft.ru

        User git_LOGIN
Обратите внимание на строчку User

Она должна быть вида:

git_sin или

git_lav или

git_boris


Администратору

Администратор создаёт на сервере учётную запись для удалённого git_пользователя, получив от него публичный ssh-ключ (обычно находится в файле ~/.ssh/id_dsa.pub).


Администратор добавляет пользователя командой:

$ sudo girar-add LOGIN pub.key "Ivan Petrov"

где LOGIN - логин пользователя, pub.key - файл с публичным ключом.

Принципиально использовать sudo и положить pub.key в домашний каталог.


Для разрешения сборки пользователю используется команда вида

# girar-build-enable LOGIN


Список доступных команд

Далее можно посмотреть список доступных команд:


$ ssh git.eter 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>

build <path to git repository> <tag name> <binary package repository name> [<project name>]


По сути можно искать, создавать, перемещать, удалять, клонировать удалённые репозитории. Причём на сервере выделяются следующие каталоги:


$ ssh git.eter ls

total 0

drwxr-x--- 4  43 Feb 21 23:03 etc

drwxr-xr-x 5 109 Mar  1 04:11 packages

drwxr-x--x 2   6 Feb 21 23:03 private


etc - это каталог с настройками, packages - каталог с общедоступными репозиториями и private - каталог с ограниченным набором видимости.


После выписывания (клонирования) удалённого репозитория работа ведётся как с обычным git- или Gear-репозиторием, после завершения работы результаты отправляются на сервер.


Создание репозитория с нуля

  1. Создаём каталог NEW-PROJECT
  1. Делаем в нём git init-db
  1. Копируем в него нужные каталоги и файлы
  1. Назначем к добавлению в репозиторий все файлы через git add -A
  1. Помещаем все файлы в репозиторий: git commit -a

(это будет initial commit)


Всё, локальный репозиторий готов. Для публикации смотрим раздел "Публикация репозитория"


Поиск репозитория

ssh git.eter find-package СТРОКА

выводит список репозиториев, в чьи названия входит строка


Клонирование другого репозитория

git clone git.eter:/people/OTHER_USER/packages/PROJECT.git

OTHER_USER - это логин другого пользователя, например shpigor

PROJECT - название репозитория


Публикация после клонирования из другого репозитория

  1. git remote -v (смотрим, какие есть алиасы для удалённых репозиториев)
  1. git remote rename origin OTHER_USER (переименовываем origin в OTHER_USER)
  1. далее смотрим раздел публикация ниже


Публикация репозитория

  1. ssh git.eter init-db packages/NEW-PROJECT.git (создаём удалённый репозиторий)
  1. git remote add origin git.eter:packages/NEW_PROJECT.git (создаём для него псевдоним origin)
  1. Публикуем git push origin --all


= Ограничение на публикацию merge

Для общих проектов разработан запрет публикации merge-коммитов.

$ ssh git.eter help|grep merges
merges <path to git repository> [yes|no]

Посмотреть текущее состояние:

$ ssh git.eter merges <repo>

Запретить публикацию merge:

$ ssh git.eter merges <repo> no


Работа с карманами

Git Etersoft Pockets - это механизм совместной работы над набором пакетов. Этот механизм предоставляет возможность создать дополнительный специализированный репозиторий, сборка в который будет проходить с помощью стандартных средств сборки Git.Etersoft.


Каждый карман привязан к базовому репозиторию (sisyphus, 5.1, 5.0, 4.1), который указывается при создании кармана:

$ ssh git.eter pocket create special

special

new pocket special: owner=sin repo=sisyphus



$ ssh git.eter pocket create special-5.1 5.1

special-5.1

new pocket special-5.1: owner=sin repo=5.1


Для сборки в карман используются стандартные команды task new и build, которым, через параметр -p, указывается имя кармана:

$ ssh git.eter task new -p special

new task #264: owner=sin repo=sisyphus pocket=special

264



$ ssh git.eter build -p special-5.1 girar 0.3-alt1.eter18

new task #267: owner=sin repo=5.1 pocket=special-5.1

task #267: added #1: build tag 0.3-alt1.eter18 from /people/sin/packages/girar.git

task #267: queued, result will be emailed to sin@etersoft.ru


Далее, над задачами, выполняются стандартные операции в Girar:

$ ssh git.eter task add 265 repo girar-builder 0.1-alt1.eter19

task #265: added #1: build tag 0.1-alt1.eter19 from /people/sin/packages/girar-builder.git



$ ssh git.eter task show 265

id=265 locked=no shared=no test_only=no repo=5.1 owner=sin seq= rc=

 1:dir=/people/sin/packages/girar-builder.git

 1:tag_name=0.1-alt1.eter19

 1:tag_id=bcdac675de69cee22472b6abad6ec89e278bc1c8

 1:tag_author=Evgeny Sinelnikov (Sin) <sin@altlinux.ru>

 1:userid=sin



$ ssh git.eter task rm 265

removing task #265 ... done


Упрощённый вариант, с использованием команды build, будет выглядеть следующим образом:

$ ssh git.eter build -p special girar-builder 0.1-alt1.eter19


Пересборка пакетов из веток

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


Чтобы решить эту проблему в GitEter расширен дополнительной командой добавления сборки репозиториев из веток. Таким образом, собирается последний коммит в заданной ветке, а не тег.


$ ssh git.eter task add --help 2>&1 | grep branch

   or: girar-task add [<task_id>] branch <gear_repo> [<gear_branch>]


Пример использования :

$ ssh git.eter task new

729

new task #729: owner=sin repo=sisyphus



$ ssh git.eter task add 729 branch /projects/asu/uniset

fetching branch "master" from /projects/asu/uniset.git... done

Cloning into /tmp/.private/git_sin/girar-autorelease.n6fHdG3IDL/git...

done.

[master e2d188c] Girar automatic build with version-release: 1.0-alt6.Build1

 1 files changed, 4 insertions(+), 1 deletions(-)

generating pkg.tar for uniset.git tag "1.0-alt6.Build1"... done

task #729: added #1: build branch "master" with tag "1.0-alt6.Build1" from /projects/asu/uniset.git



$ ssh git.eter task run 729

task #729: queued, result will be emailed to sin@etersoft.ru


Упрощённый вариант использования выглядит так:

$ ssh git.eter rebuild /projects/asu/uniset

new task #730: owner=sin repo=sisyphus

fetching branch "master" from /projects/asu/uniset.git... done

Cloning into /tmp/.private/git_sin/girar-autorelease.8xqLqboBkh/git...

done.

[master 7199c7e] Girar automatic build with version-release: 1.0-alt6.Build1

 1 files changed, 4 insertions(+), 1 deletions(-)

generating pkg.tar for uniset.git tag "1.0-alt6.Build1"... done

task #730: added #1: build branch "master" with tag "1.0-alt6.Build1" from /projects/asu/uniset.git

task #730: queued, result will be emailed to sin@etersoft.ru


Таким образом, пересборка пактов упрощена до минимума.:

$ ssh git.eter rebuild REPO [BRANCH]

 или

$ ssh git.eter task new

#NTASK

$ ssh git.eter task add NTASK branch REPO [BRANCH]

$ ssh git.eter task run NTASK


Например, пересборка в карман standpm пакета standpm-weblog выглядит так:

$ ssh git.office rebuild -p standpm /projects/asu/standpm-weblog


Перед сборкой робот делает новый временный commit и тег. Логика установки релиза выглядит следующим образом:

  • автоинкремент релиза (alt1 -> alt1.Build1, если такой есть, то alt1.Build2 и т.д.);
  • сборка с меньшим версией-релизом не допускается (alt2.Build3 -/> alt1.Build1);
  • в changelog указывается sha1 commit'а, на котором происходит сборка;
  • при сборке не в сизиф или карман не на основе сизифа, к релизу добавляется суффикс бекпорта (alt1 -> alt0.M50.1.Build1, alt2 -> alt1.M50.2.Build1, alt1.M50.2.Build1 -> alt1.M50.2.Build2 и т.д.)


Публикация из Korinf в nonfree

Добавлен механизм перегенерации баз для репозиториев:

$ ssh git.eter genbases [-b <binary_repository_name>]

где <binary_repository_name>, по умолчанию sisyphus, но может принимать значения:

- sisyphus
- 5.1
- 4.1


Этот механизм предназначен для ручной правки содержимого каталогов RPMS.nonfree.

Другие каталоги править вручную не рекомендуется.


Эта команда действует на репозиторий nonfree, файлы в который выкладываются вручную, и который не обрабатывается girar-builder.


Замечания sin@:

В идеале научить работа собирать пакеты самому, но это противоречит схеме korinf'а.

Первичный источник Korinf. Ему откуда-то дали (здесь вот я вижу несоответствие коринфа,

как первичного источника. (

кто ещё умеет собрать пакет для ALT 2.4?

) src.rpm-пакет. Он его собирает в разных средах.

Далее бинарные файлы, собранные на определённых средах (Sisyphus, 4.1, 5.1), нужно

добавить в публичные репозитории наших дополнений к этим средам. На деле, бинарные

файлы подкладываются не в ту же среде, а в похожую... Это меня смущает. (

почему похожую?

)


Ссылки