Эта страница была перенесена на
altlinux.org . Текст на freesource.info заморожен.
Оглавление документа
Создание на git.alt репозитория пакета
Цель: создать на git.alt репозиторий пакета
Создаем локальный репозитарий
$ mkdir package.git
$ cd package.git
$ git-init
Создаем пустой файл. Для создания первого commit репозиторий должен быть не пустой.
$ git-add .
$ git-commit -m "Initial commit"
Создаем ветку для исходного кода разработчика. Заносим исходный код программы от разработчика в репозиторий.
$ git-checkout -b upstream
$ cp ~/tmp/opensc-0.11.4.tar.gz ./
$ tar zxvf opensc-0.11.4.tar.gz
$ mv opensc-0.11.4 opensc
$ rm opensc-0.11.4.tar.gz
$ find opensc -type d -empty
opensc/doc/api/*
$ touch opensc/doc/api/*/ .directory_holder_git
$ git-add .
$ git-commit -m "Upstream tree import."
Создаем аннотированный тег с GPG подписью. Имя тега выставляем согласно релизу исходного когда разработчика.
$ git-tag -m 'upstream 0.11.4' -s opensc-0.11.4 0ed04a782a89f01227f732be93edf85772d4d2c6
Создаем ветку отображающую исходный код пакета. Модифицированный исходный код, содержащий патчи, исправление ошибок, итп. Каждый коммит отображает патч.
$ git-checkout -b patches
$ stg init
$ stg new -m "opensc-0.11.4.rutoken-0.1.0.diff" opensc-0.11.4.rutoken-0.1.0.diff
(приложить вручную патч patch -p1 --no-backup-if-mismatch < ../opensc-0.11.4.rutoken-test1.diff)
$ stg refresh
(посмотреть не создает ли патч новых файлов\каталогов (stg status) если есть такие добавить их (stg add opensc && stg refresh) )
$ stg commit
Заносим полученное дерево исходных кодов в ветку master.
$ git-checkout master
$ git-pull -s ours . patches
Копируем необходимые файлы в репозиторий в ветку master:
opensc.spec – спек файл указывает как собирать пакет
readme.alt – замечание как собран этот пакет
.gear-rules – указание gear как собирать srpm пакет
Добавляем аннотированный тег с GPG подписью на модифицированное дерево исходных кодов для %Release. Если дерево не изменилось тег можно передвинуть.
$ git-tag -m 'patches for 0.11.4-alt1' -s 0.11.4-alt1 6696acb85daba30649343ab6a37950726d77f647
$ git-add .gear-rules
$ git-add opensc.spec
$ git-add readme.alt
$ gear-update-tag --all
$ gear --commit --rpmbuild -- rpm -ba
Отдельный интерес может представлять файл .gear-rules. Вот его содержимое:
copy: readme.alt
diff: @name@-@version@: opensc @version@-@release@: opensc name=@name@-@version@-@release@-super.patch
tar: @name@-@version@: opensc name=@name@-@version@
Удаляем мусор, и отправляем репозиторий на git.alt
$ git commit -a -m "Package opensc-0.11.4-alt1"
$ git-repack -a -d
$ git-push --all git.alt: /people/stanv/packages/opensc_current.git
$ git-push --tags git.alt: /people/stanv/packages/opensc_current.git
Обновляем пакет
Припустим апстрим выпустил новую версию продукта.
Скачаем со свеого репозитария старую версию:
$ git clone git.alt: /people/stanv/packages/openct_current.git
$ cd openct_current
Создадим ветку upstrem на основе оригинальной и перейдем в нее.
$ git checkout -b upstream origin/upstream
Заметки
git.alt from raorn
Задача
Я узнал что у меня есть огромная семья... Кто-то нашептал, что в git лежит новая сборка пакета N. У меня есть дополнения к этому пакету. Хотелось бы склонировать чужой git-репозитарий, внести правки и отослать это мантейнеру. Как?
Далее пакет N == ocsinventory-server
Поиск git-репозитария на git.alt
ssh git.alt find-package ocsinventory-server
/people/raorn/packages/ocsinventory-server.git
Создание клона репозитария на git.alt
Теперь я создам себе клон raorn'овского репозитария на git.alt
ssh git.alt clone /people/raorn/packages/ocsinventory-server ocsinventory-server
Проверяю
ssh git.alt ls /people/barabashka/packages/ocsinventory-server.git
total 20
-rw-r--r-- 1 23 Apr 14 19: 36 HEAD
-rw-r--r-- 1 66 Apr 14 19: 36 config
-rw-r--r-- 1 29 Apr 14 19: 36 description
-rw------- 1 0 Apr 14 19: 36 git-daemon-export-ok
lrwxrwxrwx 1 22 Apr 14 19: 36 hooks -> /usr/share/girar/hooks
drwxr-sr-x 4 4096 Apr 14 18: 00 objects
drwxr-sr-x 4 4096 Apr 14 19: 36 refs
Получение git-репозитария на локальную машину с git.alt
git clone git.alt: /people/barabashka/packages/ocsinventory-server.git
Initialized empty Git repository in /home/lsv/Projects/OCS/ocsinventory-server/.git/
remote: Generating pack...
remote: Done counting 3384 objects.
remote: Deltifying 3384 objects...
remote: 100% (3384/3384) done
remote: Total 3384 (delta 2377), reused 3384 (delta 2377)
Receiving objects: 100% (3384/3384), 11.24 MiB | 661 KiB/s, done.
Надо заметить, что я клонирую с git.alt не raorn'овский, а свой. Чтобы original-refs смотрели на мой репозитарий, а не на raorn'овский.
Подключение удаленного репозитария с git.alt
Теперь подключаю raorn'овский репозитарий как удаленный к себе на локальную машину
git remote add alt-raorn-ocs git.alt: /people/raorn/packages/ocsinventory-server.git
Получение удаленного репозитария raorn'а
git fetch alt-raorn-ocs
From git.alt: /people/raorn/packages/ocsinventory-server
* [new branch] master -> alt-raorn-ocs/master
* [new branch] stable_1_0_1 -> alt-raorn-ocs/stable_1_0_1
Синхронизация branch'ей
git fetch alt-raorn-ocs 'refs/heads/*: refs/heads/*'
From git.alt: /people/raorn/packages/ocsinventory-server
* [new branch] stable_1_0_1 -> stable_1_0_1
* [new branch] upstream -> upstream
Итого
git status
# On branch master
nothing to commit (working directory clean)
git branch
* master
stable_1_0_1
upstream
git branch -r
alt-raorn-ocs/master
alt-raorn-ocs/stable_1_0_1
alt-raorn-ocs/upstream
origin/HEAD
origin/master
origin/stable_1_0_1
origin/upstream
Внесение изменений и отправка изменений к себе на git.alt
Далее вносятся изменения в локальные файлы, все это дело commit'ется.
Теперь можно отправлять их к себе в git-репозитарий на git.alt
git push
Counting objects: 13, done.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (8/8), 1.99 KiB, done.
Total 8 (delta 6), reused 0 (delta 0)
girar-update: email notification about `refs/heads/master' update sent.
refs/heads/master: 742e85f3e1ace767197aa3b8bc9a7a1fd09bdc13 -> 99721cfb940326175087a5100ff61463cf8b06ba
To git.alt: /people/barabashka/packages/ocsinventory-server.git
742e85f..99721cf master -> master
Pack pack-1e0859e3d4c1c011cef2f2a9e8222d1e136c84df created.
Removing unused objects 100%...
Done.
UPDATE PACKAGE .alt4->.alt5 (new patch)
$ git checkout -b patches origin/patches
$ stg init
$ stg uncommit opensc_patch -n 2 (opensc_patch – префикс для патчей)
$ stg applied
opensc_patch1
opensc_patch2
$ stg series
+ opensc_patch1
> opensc_patch2
$ stg delete
$ stg new -m “opensc-0.11.
4–0 .11.4.rutoken-0.3.2.diff” rutoken
Копируем новый патч:
$ cp /RPM/opensc/SOURCES/opensc-0.11.
4–0 .11.4.rutoken-0.3.2.diff opensc/
$ cd opensc/
$ stg import opensc-0.11.
4–0 .11.4.rutoken-0.3.2.diff
$ stg status
$stg refresh -m “opensc-0.11.
4–0 .11.4.rutoken-0.3.2.diff” (применим патч как коммит для git)
$ git-checkout master
$ git-pull -s ours . patches
$ vim opensc.spec
$ gear-update-tag --all
$ gear --commit --rpmbuild — rpm -ba
$ git-repack -a -d
$ git-push --all git.alt:/people/stanv/packages/opensc_current.git
$ git-push --tags git.alt:/people/stanv/packages/opensc_current.git
готово
Happy end
http://www.freesource.info/wiki/BranchInGit
Если есть вопросы – обращайтесь.