Git.alt/Краткое руководство: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
 
(не показаны 23 промежуточные версии 10 участников)
Строка 1: Строка 1:
{{DISPLAYTITLE:git.alt/Краткое руководство}}
{{DISPLAYTITLE:git.alt/Краткое руководство}}
Эта страница приводит примеры использования <tt>git.alt</tt> для работы над пакетами, но не является [[Справочник по git.alt|справочником по git.alt]] или учебником по [[git]].
Эта страница приводит примеры использования <tt>gitery.altlinux.org</tt> и <tt>gyle.altlinux.org</tt> ([[Gitery.alt|бывшими]] <tt>git.alt</tt> и <tt>girar</tt>) для работы над пакетами, но не является [[Справочник по git.alt|справочником по git.alt]] или учебником по [[git]]. Заметим, что сейчас сервис "гитовница" и "сборочница" [[Gitery.alt|разделены]], при этом на "сборочнице" - <tt>gyle.altlinux.org</tt> функционал реализован с помощью пакета [[girar|Girar]].


== Настройка ==
== Настройка ==


Убедитесь, что ваш SSH-ключ зарегистрирован [[Join|принимающими в команду]], и проведите настройку в соответствии с описанием в [[Справочник по git.alt#SSH-доступ|справочнике]].
Убедитесь, что ваш SSH-ключ зарегистрирован [[Join|принимающими в команду]], и проведите настройку в соответствии с описанием в [[Справочник по git.alt#SSH-доступ|справочнике]].
Дальнейшая инструкция подразумевает, что ssh-клиент настроен в соответствии с описанием в [[Справочник по git.alt#SSH-доступ|справочнике по git.alt]], в частности, в конфигурационном файле {{path|~/.ssh/config}} есть хосты с именами <tt>gitery</tt> и <tt>gyle</tt>.


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


Для поиска репозиториев используется команда <tt>find-package</tt> (результатов может быть и больше):
Для поиска репозиториев используется команда <tt>find-package</tt> (результатов может быть и больше):
  $ ssh git.alt find-package bugzilla
  $ ssh gitery find-package bugzilla
  /people/vvk/packages/bugzilla.git 1168522087
  /people/vvk/packages/bugzilla.git 1168522087
  $
  $
Склонировать репозиторий можно с помощью команды <tt>clone</tt>:
Склонировать репозиторий можно с помощью команды <tt>clone</tt>:
  $ ssh git.alt clone /people/vvk/packages/bugzilla.git
  $ ssh gitery clone /people/vvk/packages/bugzilla.git
  Initialized empty Git repository in /people/dottedmag/packages/bugzilla.git/
  Initialized empty Git repository in /people/dottedmag/packages/bugzilla.git/
  $
  $
Эта команда создаст вашу копию репозитория ''на сервере git.alt''. Для работы с ним необходимо склонировать этот репозиторий на локальную машину<ref>См. тж. {{cmd|girar-clone(1)}} из пакета {{pkg|girar-utils}}</ref>:
Эта команда создаст вашу копию репозитория ''на сервере gitery''. Для работы с ним необходимо склонировать этот репозиторий на локальную машину<ref>См. тж. {{cmd|girar-clone(1)}} из пакета {{pkg|girar-utils}}</ref>:
  $ git clone git.alt:packages/bugzilla.git
  $ git clone gitery:packages/bugzilla.git
  Initialized empty Git repository in /home/dottedmag/bugzilla/.git/
  Initialized empty Git repository in /home/dottedmag/bugzilla/.git/
  ....
  ....
Строка 24: Строка 26:
== Создание нового репозитория и работа над ним ==
== Создание нового репозитория и работа над ним ==


Создать свой репозиторий на <tt>git.alt</tt> очень просто<ref>Удалить ненужный: {{cmd|ssh git.alt rm-db test}}</ref>:
Создать свой репозиторий на <tt>git.alt</tt> очень просто<ref>Удалить ненужный: {{cmd|ssh gitery rm-db test}}</ref>:
  $ ssh git.alt init-db test
  $ ssh gitery init-db test
Initialized empty Git repository in ./
  girar-init-db: /people/dottedmag/packages/test.git
  girar-init-db: /people/dottedmag/packages/test.git
  $
  $
Поскольку в созданном репозитории нет ни одного коммита, то <tt>git clone</tt> будет ругаться при попытке его склонировать. Если необходимо создать пустой локальный репозиторий<ref>Некоторые рекомендуют собирать их под {{path|~/git/}}</ref>:
Поскольку в созданном репозитории нет ни одного коммита, то <tt>git clone</tt> будет ругаться при попытке его склонировать. Поэтому дальше необходимо создать пустой локальный репозиторий.<ref>Некоторые рекомендуют собирать их под {{path|~/git/}}</ref>:
  $ mkdir test; cd test; git init
  $ mkdir test; cd test; git init
  Initialized empty Git repository in /home/dottedmag/test/.git/
  Initialized empty Git repository in /home/dottedmag/test/.git/
  $
  $
Закоммитить в него нужное содержимое и отправить на <tt>git.alt</tt><ref>См. тж. {{cmd|girar-upload(1)}}</ref>:
Затем нужно закоммитить в него нужное содержимое (например, файл README) и отправить на <tt>gitery</tt><ref>См. тж. {{cmd|girar-upload(1)}}</ref>:
  $ touch README
  $ touch README
  $ git add README
  $ git add README
  $ git commit -m 'first commit'
  $ git commit -m 'first commit'
  $ git remote add origin git.alt:packages/test.git
  $ git remote add origin gitery:packages/test.git
  $ git push origin master
  $ git push origin master
  ...
  ...
  $
  $
Через несколько минут репозиторий появится в списке: '''$ ssh gitery find-package'''


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


Указание локального имени удалённого репозитория <tt>origin</tt> и бранча <tt>master</tt> в команде {{cmd|push}} необходимо только в первый раз для создания бранча <tt>master</tt> в удалённом репозитории. {{cmd|git remote add}} создаёт в конфиг-файле локального репозитория<ref>{{path|.git/config}}</ref> запись, подобную такой:
Указание локального имени удалённого репозитория <tt>origin</tt> и бранча <tt>master</tt> в команде {{cmd|push}} необходимо только в первый раз для создания бранча <tt>master</tt> в удалённом репозитории. {{cmd|git remote add}} создаёт в конфиг-файле локального репозитория<ref>{{path|.git/config}}</ref> запись, подобную такой:
  [remote "origin"]
  [remote "origin"]
         url = ssh://git.alt/people/dottedmag/packages/test.git
         url = ssh://gitery/people/dottedmag/packages/test.git
         fetch = +refs/heads/*:refs/remotes/origin/*
         fetch = +refs/heads/*:refs/remotes/origin/*
И поэтому в дальнейшем {{cmd|git push}} будет отправлять в удалённый репозиторий все локальные ветки ({{path|refs/heads/*}}), по названию соответствующие удалённым ({{path|refs/remotes/origin/*}}).
И поэтому в дальнейшем {{cmd|git push}} будет отправлять в удалённый репозиторий все локальные ветки ({{path|refs/heads/*}}), по названию соответствующие удалённым ({{path|refs/remotes/origin/*}}).


== Сборка пакета в Сизиф ==
== Сборка пакета в Сизиф через gyle.altlinux.org ==


Создаём подписанный тэг (при установленном пакете {{pkg|gear}} вместо {{cmd|git tag}} удобней воспользоваться {{cmd|gear-create-tag}}):
Создаём подписанный тэг (при установленном пакете {{pkg|gear}} вместо {{cmd|git tag}} удобней воспользоваться {{cmd|gear-create-tag}}):
Строка 61: Строка 64:
  $ git push origin --tags
  $ git push origin --tags
Отправляем пакет на сборку в Сизиф:
Отправляем пакет на сборку в Сизиф:
  $ ssh git.alt build packages/test.git test-0.1-alt1
  $ ssh gyle build packages/test.git test-0.1-alt1


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


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


Cписок репозиториев можно получить с помощью команды <tt>ssh git.alt task new --help</tt>.
Cписок репозиториев можно получить с помощью команды <tt>ssh gyle task new --help</tt>.
Пример:
Пример:
  $ ssh git.alt task new --help
  $ ssh gyle task new --help
  usage: girar-task new [<binary_repository_name>]
  usage: girar-task new [<binary_repository_name>]
  Valid repositories are: '''sisyphus p5 5.1 5.0 4.1 4.0'''
  Valid repositories are: '''sisyphus t6 p6 c6 p5 5.1 5.0 4.1 4.0'''


Отдельным локальным бранчем (например, <tt>M51</tt>) оформляем спек согласно [[BackportsPolicy|backports policy]], коммитим<ref>См. тж. {{cmd|gear-commit}}</ref> и создаём подписанный тэг<ref>См. тж. {{cmd|gear-create-tag(1)}}</ref>:
Отдельным локальным бранчем (например, <tt>t6</tt>) оформляем спек согласно [[BackportsPolicy|backports policy]], коммитим<ref>См. тж. [http://docs.altlinux.org/manpages/gear-commit.1.html gear-commit(1)]</ref> и создаём подписанный тэг<ref>См. тж. [http://docs.altlinux.org/manpages/gear-create-tag.1.html gear-create-tag(1)]</ref>:
  $ git checkout -b M51
  $ git checkout -b t6
  $ $EDITOR test.spec
  $ $EDITOR test.spec
  $ git commit -a -m "test-0.1-alt0.M51.1"
  $ git commit -a -m "test-0.1-alt0.M60T.1"
  $ git tag -s -m "test-0.1-alt0.M51.1" test-0.1-alt0.M51.1
  $ git tag -s -m "test-0.1-alt0.M60T.1" test-0.1-alt0.M60T.1
  $ git push origin --tags
  $ git push test-0.1-alt0.M60T.1
Отправляем пакет на сборку:
Отправляем пакет на сборку:
  $ ssh git.alt build '''-b 5.1''' packages/test.git test-0.1-alt0.M51.1
  $ ssh gyle build '''-b t6''' packages/test.git test-0.1-alt0.M60T.1


== Сборка группы пакетов ==
== Сборка группы пакетов ==
Строка 94: Строка 97:
  $ git tag -s -m "test2-0.1-alt1" test2-0.1-alt1
  $ git tag -s -m "test2-0.1-alt1" test2-0.1-alt1
  $ git push origin --tags
  $ git push origin --tags
Создаём задачу для сборки:
Создаём задачу для сборки:
  $ ssh git.alt task new
  $ ssh gyle task new
Добавляем репозитории и тэги:
Добавляем репозитории и тэги:
  $ ssh git.alt task add repo packages/test.git test-0.1-alt1
  $ ssh gyle task add repo test.git 0.1-alt1
  $ ssh git.alt task add repo packages/test2.git test2-0.1-alt1
  $ ssh gyle task add repo test2.git 0.1-alt1
Запускаем задачу:
Запускаем задачу:
  $ ssh git.alt task run
  $ ssh gyle task run
Альтернативно, вместо последовательности команд <tt>task new</tt>, <tt>task add</tt> и <tt>task run</tt> создать и отправить задание на сборку можно так:
$ ssh gyle build test.git 0.1-alt1 test2.git 0.1-alt1


== Перекладывание (копирование) собранного пакета ==
== Перекладывание (копирование) собранного пакета ==
Этот пример демонстрирует копирование пакета из Sisyphus в 5.1/branch.
Этот пример демонстрирует копирование пакета из Sisyphus в t6/branch:
  $ ssh git.alt task new 5.1
  $ ssh gyle task new t6
  $ ssh git.alt task add copy update-kernel sisyphus
  $ ssh gyle task add copy update-kernel sisyphus
  $ ssh git.alt task run
  $ ssh gyle task run
При копировании пакетов из Sisyphus существует более простой способ добиться того же результата:
$ ssh gyle build -b t6 copy update-kernel


== Результат сборки ==
== Результат сборки ==
Строка 113: Строка 119:
Результат выполнения задания вы можете посмотреть на  
Результат выполнения задания вы можете посмотреть на  


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


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


  ssh git.alt task ls
  ssh gyle task ls


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


Осуществляется в рамках <tt>task</tt> путём добавления запроса на удаление.
Осуществляется путем создания задания с запросом на удаление.
Пример:
Пример:
  $ ssh git.alt task new 5.1
  $ ssh gyle build -b t6 del linuxwacom
$ ssh git.alt task add del linuxwacom
$ ssh git.alt task run


== Примечания ==
== Примечания ==

Текущая версия от 11:02, 15 декабря 2022

Эта страница приводит примеры использования gitery.altlinux.org и gyle.altlinux.org (бывшими git.alt и girar) для работы над пакетами, но не является справочником по git.alt или учебником по git. Заметим, что сейчас сервис "гитовница" и "сборочница" разделены, при этом на "сборочнице" - gyle.altlinux.org функционал реализован с помощью пакета Girar.

Настройка

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

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

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

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

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

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

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

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

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

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

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

$ ssh gitery 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[4]:

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

Через несколько минут репозиторий появится в списке: $ ssh gitery find-package

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

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

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

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

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

Сборка пакета в Сизиф через gyle.altlinux.org

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

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

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

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

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

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

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

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

$ ssh gyle 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 gyle 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 gyle task new

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

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

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

$ ssh gyle task run

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

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

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

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

$ ssh gyle task new t6
$ ssh gyle task add copy update-kernel sisyphus
$ ssh gyle task run

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

$ ssh gyle build -b t6 copy update-kernel

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

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

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

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

ssh gyle task ls

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

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

$ ssh gyle build -b t6 del linuxwacom

Примечания

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