Gear/tags: различия между версиями
(Import from freesource.info) |
(fixes) |
||
Строка 1: | Строка 1: | ||
[[ | [[Категория:Devel]] | ||
== Использование .gear-tags == | == Использование .gear-tags == | ||
Цель использования gear- | Цель использования gear-tags — получить в .src.rpm-е тарбол оригинальных сырцов + кумулятивный патч наших изменений. | ||
Структура репозитория должна быть примерно такой: | Структура репозитория должна быть примерно такой: | ||
* '''upstream''' | * '''upstream''' — сюда импортятся оригинальные тарболы один за другим, при этом проставляются таги с именем «vверсия», то есть v1.0, v2.0, v3.0 и т.д | ||
* '''master''' | * '''master''' — это наш рабочий бранч, тут мы храним спек, дополнительные sources и изменённые исходники. На каждый релиз пакета проставляются таги вида %version-%release, то есть 1.0-alt1, 1.0-alt2, 1.0-alt3 и т. д. | ||
'''master''' и '''upstream''' связаны следующим образом: когда-то, сразу после прикладывания патчей (версия нашего проекта foo совпадает в master и upstream) для создания общего base, в бранче master был выполнен | '''master''' и '''upstream''' связаны следующим образом: когда-то, сразу после прикладывания патчей (версия нашего проекта foo совпадает в master и upstream) для создания общего base, в бранче master был выполнен | ||
<pre>git | <pre>git merge -s ours . upstream</pre> | ||
В дальнейшем, при обновлении версии, производится | В дальнейшем, при обновлении версии, производится | ||
<pre>git | <pre>git merge . upstream</pre> | ||
При этом все наши интегрированные патчи, спек, | При этом все наши интегрированные патчи, спек, sources — сохраняются. Если возникает конфликт, git об этом напишет, остаётся лишь устранить его (например, воспользовавшись '''git mergetool'''). | ||
Для реализации поставленной задачи необходимо несколько вникнуть в применение директив файла '''.gear-rules''', и соответствующим образом его модифицировать. Найти информацию можно в заголовке '''/usr/bin/gear''' или в man-странице '''gear-rules(5)''' | Для реализации поставленной задачи необходимо несколько вникнуть в применение директив файла '''.gear-rules''', и соответствующим образом его модифицировать. Найти информацию можно в заголовке '''/usr/bin/gear''' или в man-странице '''gear-rules(5)''' | ||
Итак, нам необходимо, чтобы в тарбол помещалось оригинальное дерево исходников: | Итак, нам необходимо, чтобы в тарбол помещалось оригинальное дерево исходников: | ||
<pre>tar: v@version@:foo</pre> | <pre>tar: v@version@:foo</pre> | ||
В данном случае мы говорим, что tar-файл необходимо завернуть директорию '''foo''', которая должна быть взята из тага '''v@version@'''. Так же можно использовать не таг, а непосредственно идентификатор коммита (sha1 хэш) | В данном случае мы говорим, что в tar-файл необходимо завернуть директорию '''foo''', которая должна быть взята из тага '''v@version@'''. Так же можно использовать не таг, а непосредственно идентификатор коммита (sha1 хэш) | ||
'''@version@''' | '''@version@''' — это тот '''Version''', что прописан в спеке. | ||
Теперь нужно сделать кумулятивный diff: | Теперь нужно сделать кумулятивный diff: | ||
<pre>diff: v@version@:foo foo</pre> | <pre>diff: v@version@:foo foo</pre> | ||
Здесь тоже всё | Здесь тоже всё просто — делается diff между директорией foo тага '''v@version@''' и директорий '''foo''' из текущего бранча ('''master'''). Имя diff-а по умолчанию '''%name-%version-%release.patch'''. | ||
Осталось сформировать список тагов, с которыми должен работать gear. Для этого предназначена специальная утилита '''gear-update-tag(1)''' | Осталось сформировать список тагов, с которыми должен работать gear. Для этого предназначена специальная утилита '''gear-update-tag(1)''' |
Версия от 18:50, 22 сентября 2008
Использование .gear-tags
Цель использования gear-tags — получить в .src.rpm-е тарбол оригинальных сырцов + кумулятивный патч наших изменений.
Структура репозитория должна быть примерно такой:
- upstream — сюда импортятся оригинальные тарболы один за другим, при этом проставляются таги с именем «vверсия», то есть v1.0, v2.0, v3.0 и т.д
- master — это наш рабочий бранч, тут мы храним спек, дополнительные sources и изменённые исходники. На каждый релиз пакета проставляются таги вида %version-%release, то есть 1.0-alt1, 1.0-alt2, 1.0-alt3 и т. д.
master и upstream связаны следующим образом: когда-то, сразу после прикладывания патчей (версия нашего проекта foo совпадает в master и upstream) для создания общего base, в бранче master был выполнен
git merge -s ours . upstream
В дальнейшем, при обновлении версии, производится
git merge . upstream
При этом все наши интегрированные патчи, спек, sources — сохраняются. Если возникает конфликт, git об этом напишет, остаётся лишь устранить его (например, воспользовавшись git mergetool).
Для реализации поставленной задачи необходимо несколько вникнуть в применение директив файла .gear-rules, и соответствующим образом его модифицировать. Найти информацию можно в заголовке /usr/bin/gear или в man-странице gear-rules(5)
Итак, нам необходимо, чтобы в тарбол помещалось оригинальное дерево исходников:
tar: v@version@:foo
В данном случае мы говорим, что в tar-файл необходимо завернуть директорию foo, которая должна быть взята из тага v@version@. Так же можно использовать не таг, а непосредственно идентификатор коммита (sha1 хэш) @version@ — это тот Version, что прописан в спеке.
Теперь нужно сделать кумулятивный diff:
diff: v@version@:foo foo
Здесь тоже всё просто — делается diff между директорией foo тага v@version@ и директорий foo из текущего бранча (master). Имя diff-а по умолчанию %name-%version-%release.patch.
Осталось сформировать список тагов, с которыми должен работать gear. Для этого предназначена специальная утилита gear-update-tag(1)
gear-update-tag -ac
И не забыть закоммитить:
git commit -a -m 'Switched to use .gear-tags'