Gear/remotes: различия между версиями
Andrei (обсуждение | вклад) |
|||
(не показаны 23 промежуточные версии 6 участников) | |||
Строка 1: | Строка 1: | ||
== Введение. == | |||
{{ | |||
Gear/upstream/remotes является расширением gear, предназначенным для хранения | |||
информации об апстримном репозитории (Url, и, если необходимо, соответствие ветвей). | |||
При работе с Gear эта информация хранится в локальном {{path|.git/config}}, и, | |||
как следствие, теряется при публикации gear репозитория. | |||
Gear/upstream/remotes позволяет сохранять и восстанавливать эту информацию | |||
в публикуемом подкаталоге {{path|.gear/upstream}}, а также автоматически | |||
следить за обновлениями ({{cmd|gear-remotes-watch}}) и автоматически обновлять | |||
({{cmd|gear-remotes-uscan}}) gear репозиторий из указанного в {{path|.gear/upstream/remotes}} | |||
апстримного репозитория. | |||
== Gear/upstream/remotes. == | == Gear/upstream/remotes. == | ||
=== | |||
Зачем так важно выделить информацию о remotes в отдельный файл? | |||
чтобы сразу вдобавок к возможности отслеживания решить | |||
и другую, на мой взгляд более важную, задачу: | |||
Дать стандартный способ майнтайнерам поделиться с коллегами, | |||
как же обновлять их репозиторий. | |||
Потому что в текущем виде gear репозитории не дружественны | |||
к совместной работе. tarball-обновляемые gear репозитории | |||
дружественны, src.rpm дружественны, а VCS-обновляемые - нет. | |||
Представьте себе, что ваш обновляемый из апстримного git | |||
репозиторий какой-то добрый человек поверх обновил из | |||
tarball'а и отправил на сборку в Сизиф. | |||
Похожее чувство я испытываю, когда нужно обновить перловую | |||
зависимость, но соответствующий пакет обновляется из VCS. | |||
Там весь пакет на 200 строчек. Я знаю, какая там версия. | |||
У меня под рукой свежий апстримный tarball. | |||
Но я не могу взять и обновить - надо рыться в VCS-помойках | |||
и искать, где этот ****ов git и затем настраивать (каждый раз!) | |||
клонированный репозиторий, и все только для того, | |||
чтобы сделать git fetch origin. | |||
И майнтайнер, который разместил свой пакет в VCS-обновляемом | |||
gear репозитории не виноват --- это дыра в дизайне gear, | |||
которая делает VCS-обновляемые gear репозитории гораздо худшим | |||
средством для _совместной_ разработки, чем src.rpm. | |||
И всего-то надо инструмент, чтобы gear репозиторий | |||
хранил в себе свои remotes. | |||
как минимум, что-то вроде | |||
gear-remotes-save и gear-remotes-restore | |||
Это удобно и NMUшникам, и основному майнтайнеру: | |||
если remotes не сохраняются, то на git.alt копии его | |||
репозиториев неполноценные, и если слетит диск, | |||
то не достаточно будет склонировать их с git.alt, | |||
придется заново тратить время на восстановление | |||
локальных настроек remotes (а если использовался | |||
git-svn, то там все вообще печально). | |||
Да и на даче / в походе удобнее - | |||
не нужно таскать с собой диски | |||
или тратить время на настройку git-клона. | |||
=== Файлы gear remotes (.gear/upstream/remotes) === | |||
Файл .gear/upstream/remotes использует тот же формат, что и .git/config. | |||
[remote "upstream"] | [remote "upstream"] | ||
url = git://git.netxms.org/public/netxms.git | url = git://git.netxms.org/public/netxms.git | ||
fetch = +refs/heads/*:refs/remotes/upstream/* | fetch = +refs/heads/*:refs/remotes/upstream/* | ||
Файл .gear/upstream/remotes можно получить, просто скопировав .git/config | |||
и удалив из него не относящиеся к remotes секции. | |||
Файл {{path|.gear/upstream/remotes}} может содержать не только информацию о remotes, | |||
но и хранить копию дополнительных настроек git репозитория. | |||
У разных людей дополнительные настройки могут отличаться. | |||
Поэтому файл .gear/upstream/remotes выбирается в следующем порядке: | |||
.gear/upstream/remotes$GEAR_UPSTREAM_REMOTES_SUFFIX | |||
.gear/upstream/remotes.$USER | |||
.gear/upstream/remotes | |||
Это позволяет иметь один общеупотребительный файл {{path|.gear/upstream/remotes}} | |||
и персональные backups в {{path|.gear/upstream/remotes.$USER.}} | |||
Все эти файлы будем называть файлы gear remotes. | |||
=== Утилиты для работы с файлами gear remotes === | |||
Установите пакет {{pkg|perl-Gear-Remotes}}: | |||
apt-get update | |||
apt-get install perl-Gear-Remotes gear-uupdate | |||
{| class="standard" | |||
!исполняемый файл | |||
!Описание | |||
|- | |||
|class="shadow"|gear-remotes-restore | |||
|Используется в клонированном репозитории. Восстанавливает настройки {{path|.git/config}} из файлов gear remotes | |||
|- | |||
|class="shadow"|gear-remotes-save | |||
|Используется мейнтейнером для публикации своих remotes, т.е. создания {{path|.gear/upstream/remotes}} из {{path|.git/config}} | |||
|} | |||
=== Нестандартные теги === | |||
для нестандартных тегов необходимо создать исполняемые файлы (В названии '''дефис''', не подчеркивание!) | |||
{| class="standard" | |||
!исполняемый файл | |||
!Описание | |||
|- | |||
|class="shadow"|.gear/upstream/filter-tag | |||
|исполняемый файл, который отфильтровывает из STDIN теги релиза | |||
|- | |||
|class="shadow"|.gear/upstream/transform-tag | |||
|исполняемый файл, который получает из STDIN теги релиза и преобразует их в привычный для RPM вид. | |||
|} | |||
идея в том, чтобы запустить конвейер | |||
git tag | .gear/upstream/filter-tag | .gear/upstream/transform-tag | |||
и получить список доступных версий пакета. | |||
Пример: апстрим пользуется тегами вида | |||
REL0_95 | |||
REL1_03 | |||
.gear/upstream/filter-tag: (не забудьте сделать исполняемым!) | |||
grep 'REL' | |||
.gear/upstream/transform-tag: | |||
sed -e 's,^REL,,;s,_,.,;' | |||
== Наблюдение за тегами == | |||
Утилита {{cmd|gear-remotes-watch}} позволяет наблюдать за удаленными репозиториями, прописанными в {{path|.gear/upstream/remotes}} | |||
поддерживаются теги вида '''@version@''' и '''v@version@'''. | |||
<source lang="bash">$ gear-remotes-watch | |||
git fetch upstream | |||
New version 3.4.4 is available from tag v3.4.4.</source> | |||
Получить для скриптов на Bash значения новой версии ({{term|$version}}) и тега ({{term|$tag}}): | |||
<source lang="bash">read -r version tag <<< "$(gear-remotes-watch | sed -n 's/^New version \([^ ]*\) is available from tag \([^ ]*\)./\1 \2/p')"</source> | |||
== Обновление до последней версии == | |||
Если {{cmd|gear-remotes-watch}} только проверяет наличие новой версии, то команда {{cmd|gear-remotes-uscan}} обновляет сам gear-репозиторий. | |||
Обновить до последней апстримной версии: | |||
gear-remotes-uscan | |||
gear-commit | |||
== Обновление по тегу == | |||
gear-uupdate --upstream-version 1.28 --tag V1_28 --ch '- new version' | |||
Совет: версию и тег можно взять из последней строки вывода {{cmd|gear-remotes-watch}}. | |||
{{attention|{{cmd|gear-uupdate}} работает только с архивами, создаваемыми из тега или бранча. Обычный tar: . не поддерживается.}} | |||
{{Category navigation|title=gear|category=gear|sortkey={{SUBPAGENAME}}}} | |||
{{Category navigation|title=Автоматизация работы с пакетами|category=Packaging Automation}} | |||
[[Категория:Справочники]] |
Текущая версия от 12:13, 23 мая 2022
Введение.
Gear/upstream/remotes является расширением gear, предназначенным для хранения информации об апстримном репозитории (Url, и, если необходимо, соответствие ветвей).
При работе с Gear эта информация хранится в локальном .git/config, и, как следствие, теряется при публикации gear репозитория.
Gear/upstream/remotes позволяет сохранять и восстанавливать эту информацию в публикуемом подкаталоге .gear/upstream, а также автоматически следить за обновлениями (gear-remotes-watch) и автоматически обновлять (gear-remotes-uscan) gear репозиторий из указанного в .gear/upstream/remotes апстримного репозитория.
Gear/upstream/remotes.
Зачем так важно выделить информацию о remotes в отдельный файл? чтобы сразу вдобавок к возможности отслеживания решить и другую, на мой взгляд более важную, задачу:
Дать стандартный способ майнтайнерам поделиться с коллегами, как же обновлять их репозиторий.
Потому что в текущем виде gear репозитории не дружественны к совместной работе. tarball-обновляемые gear репозитории дружественны, src.rpm дружественны, а VCS-обновляемые - нет.
Представьте себе, что ваш обновляемый из апстримного git репозиторий какой-то добрый человек поверх обновил из tarball'а и отправил на сборку в Сизиф.
Похожее чувство я испытываю, когда нужно обновить перловую зависимость, но соответствующий пакет обновляется из VCS. Там весь пакет на 200 строчек. Я знаю, какая там версия. У меня под рукой свежий апстримный tarball. Но я не могу взять и обновить - надо рыться в VCS-помойках и искать, где этот ****ов git и затем настраивать (каждый раз!) клонированный репозиторий, и все только для того, чтобы сделать git fetch origin.
И майнтайнер, который разместил свой пакет в VCS-обновляемом gear репозитории не виноват --- это дыра в дизайне gear, которая делает VCS-обновляемые gear репозитории гораздо худшим средством для _совместной_ разработки, чем src.rpm.
И всего-то надо инструмент, чтобы gear репозиторий хранил в себе свои remotes.
как минимум, что-то вроде gear-remotes-save и gear-remotes-restore
Это удобно и NMUшникам, и основному майнтайнеру: если remotes не сохраняются, то на git.alt копии его репозиториев неполноценные, и если слетит диск, то не достаточно будет склонировать их с git.alt, придется заново тратить время на восстановление локальных настроек remotes (а если использовался git-svn, то там все вообще печально).
Да и на даче / в походе удобнее - не нужно таскать с собой диски или тратить время на настройку git-клона.
Файлы gear remotes (.gear/upstream/remotes)
Файл .gear/upstream/remotes использует тот же формат, что и .git/config.
[remote "upstream"] url = git://git.netxms.org/public/netxms.git fetch = +refs/heads/*:refs/remotes/upstream/*
Файл .gear/upstream/remotes можно получить, просто скопировав .git/config и удалив из него не относящиеся к remotes секции.
Файл .gear/upstream/remotes может содержать не только информацию о remotes, но и хранить копию дополнительных настроек git репозитория. У разных людей дополнительные настройки могут отличаться. Поэтому файл .gear/upstream/remotes выбирается в следующем порядке:
.gear/upstream/remotes$GEAR_UPSTREAM_REMOTES_SUFFIX .gear/upstream/remotes.$USER .gear/upstream/remotes
Это позволяет иметь один общеупотребительный файл .gear/upstream/remotes и персональные backups в .gear/upstream/remotes.$USER. Все эти файлы будем называть файлы gear remotes.
Утилиты для работы с файлами gear remotes
Установите пакет perl-Gear-Remotes:
apt-get update apt-get install perl-Gear-Remotes gear-uupdate
исполняемый файл | Описание |
---|---|
gear-remotes-restore | Используется в клонированном репозитории. Восстанавливает настройки .git/config из файлов gear remotes |
gear-remotes-save | Используется мейнтейнером для публикации своих remotes, т.е. создания .gear/upstream/remotes из .git/config |
Нестандартные теги
для нестандартных тегов необходимо создать исполняемые файлы (В названии дефис, не подчеркивание!)
исполняемый файл | Описание |
---|---|
.gear/upstream/filter-tag | исполняемый файл, который отфильтровывает из STDIN теги релиза |
.gear/upstream/transform-tag | исполняемый файл, который получает из STDIN теги релиза и преобразует их в привычный для RPM вид. |
идея в том, чтобы запустить конвейер
git tag | .gear/upstream/filter-tag | .gear/upstream/transform-tag
и получить список доступных версий пакета.
Пример: апстрим пользуется тегами вида
REL0_95 REL1_03
.gear/upstream/filter-tag: (не забудьте сделать исполняемым!) grep 'REL'
.gear/upstream/transform-tag: sed -e 's,^REL,,;s,_,.,;'
Наблюдение за тегами
Утилита gear-remotes-watch позволяет наблюдать за удаленными репозиториями, прописанными в .gear/upstream/remotes поддерживаются теги вида @version@ и v@version@.
$ gear-remotes-watch
git fetch upstream
New version 3.4.4 is available from tag v3.4.4.
Получить для скриптов на Bash значения новой версии ($version) и тега ($tag):
read -r version tag <<< "$(gear-remotes-watch | sed -n 's/^New version \([^ ]*\) is available from tag \([^ ]*\)./\1 \2/p')"
Обновление до последней версии
Если gear-remotes-watch только проверяет наличие новой версии, то команда gear-remotes-uscan обновляет сам gear-репозиторий.
Обновить до последней апстримной версии:
gear-remotes-uscan gear-commit
Обновление по тегу
gear-uupdate --upstream-version 1.28 --tag V1_28 --ch '- new version'
Совет: версию и тег можно взять из последней строки вывода gear-remotes-watch.