git/gitnotes
Материал из ALT Linux Wiki
Ilis (обсуждение | вклад) |
(→Синхронизация branch'ей: не, не так) |
||
(6 промежуточных версий не показаны.) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:git/gitnotes}} | {{DISPLAYTITLE:git/gitnotes}} | ||
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/git/gitnotes}} | {{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/git/gitnotes}} | ||
- | + | {{crap}} | |
__TOC__ | __TOC__ | ||
- | |||
=== Создание на git.alt репозитория пакета === | === Создание на git.alt репозитория пакета === | ||
Строка 9: | Строка 8: | ||
'''Цель:''' создать на git.alt репозиторий пакета | '''Цель:''' создать на git.alt репозиторий пакета | ||
- | * Создаем локальный | + | * Создаем локальный репозиторий |
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
$ mkdir package.git | $ mkdir package.git | ||
$ cd package.git | $ cd package.git | ||
- | $ git | + | $ git init</source></div></div> |
* Создаем пустой файл. Для создания первого commit репозиторий должен быть не пустой. | * Создаем пустой файл. Для создания первого commit репозиторий должен быть не пустой. | ||
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
Строка 19: | Строка 18: | ||
* Создаем первый коммит | * Создаем первый коммит | ||
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
- | $ git | + | $ git add . |
- | $ git | + | $ git commit -m "Initial commit"</source></div></div> |
* Создаем ветку для исходного кода разработчика. Заносим исходный код программы от разработчика в репозиторий. | * Создаем ветку для исходного кода разработчика. Заносим исходный код программы от разработчика в репозиторий. | ||
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
- | $ git | + | $ git checkout -b upstream |
$ cp ~/tmp/opensc-0.11.4.tar.gz ./ | $ cp ~/tmp/opensc-0.11.4.tar.gz ./ | ||
$ tar zxvf opensc-0.11.4.tar.gz | $ tar zxvf opensc-0.11.4.tar.gz | ||
Строка 32: | Строка 31: | ||
$ touch opensc/doc/api/*/.directory_holder_git | $ touch opensc/doc/api/*/.directory_holder_git | ||
или $ find libopensync/ -type d -empty -exec touch '{}/.directory_holder_git' \; | или $ find libopensync/ -type d -empty -exec touch '{}/.directory_holder_git' \; | ||
- | $ git | + | $ git add . |
- | $ git | + | $ git commit -m "Upstream tree import."</source></div></div> |
* Создаем аннотированный тег с GPG подписью. Имя тега выставляем согласно релизу исходного когда разработчика. | * Создаем аннотированный тег с GPG подписью. Имя тега выставляем согласно релизу исходного когда разработчика. | ||
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
- | $ git | + | $ git tag -m 'upstream 0.11.4' -s opensc-0.11.4 0ed04a782a89f01227f732be93edf85772d4d2c6</source></div></div> |
* Создаем ветку отображающую исходный код пакета. Модифицированный исходный код, содержащий патчи, исправление ошибок, итп. Каждый коммит отображает патч. | * Создаем ветку отображающую исходный код пакета. Модифицированный исходный код, содержащий патчи, исправление ошибок, итп. Каждый коммит отображает патч. | ||
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
- | $ git | + | $ git checkout -b patches |
$ stg init | $ stg init | ||
$ stg new -m "opensc-0.11.4.rutoken-0.1.0.diff" opensc-0.11.4.rutoken-0.1.0.diff | $ stg new -m "opensc-0.11.4.rutoken-0.1.0.diff" opensc-0.11.4.rutoken-0.1.0.diff | ||
Строка 48: | Строка 47: | ||
* Заносим полученное дерево исходных кодов в ветку master. | * Заносим полученное дерево исходных кодов в ветку master. | ||
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
- | $ git | + | $ git checkout master |
- | $ git | + | $ git pull -s ours . patches</source></div></div> |
* Копируем необходимые файлы в репозиторий в ветку master: | * Копируем необходимые файлы в репозиторий в ветку master: | ||
** <tt>opensc.spec</tt> - спек файл указывает как собирать пакет | ** <tt>opensc.spec</tt> - спек файл указывает как собирать пакет | ||
Строка 57: | Строка 56: | ||
* Добавляем аннотированный тег с GPG подписью на модифицированное дерево исходных кодов для %Release. Если дерево не изменилось тег можно передвинуть. | * Добавляем аннотированный тег с GPG подписью на модифицированное дерево исходных кодов для %Release. Если дерево не изменилось тег можно передвинуть. | ||
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
- | $ git | + | $ git tag -m 'patches for 0.11.4-alt1' -s 0.11.4-alt1 6696acb85daba30649343ab6a37950726d77f647</source></div></div> |
* Пытаемся собрать пакет | * Пытаемся собрать пакет | ||
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
- | $ git | + | $ git add .gear-rules |
- | $ git | + | $ git add opensc.spec |
- | $ git | + | $ git add readme.alt |
$ gear-update-tag --all | $ gear-update-tag --all | ||
$ gear --commit --rpmbuild -- rpm -ba</source></div></div> | $ gear --commit --rpmbuild -- rpm -ba</source></div></div> | ||
Строка 76: | Строка 75: | ||
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
$ git commit -a -m "Package opensc-0.11.4-alt1" | $ git commit -a -m "Package opensc-0.11.4-alt1" | ||
- | $ git | + | $ git repack -a -d |
- | $ git | + | $ git push --all git.alt:/people/stanv/packages/opensc_current.git |
- | $ git | + | $ git push --tags git.alt:/people/stanv/packages/opensc_current.git</source></div></div> |
==== Обновляем пакет ==== | ==== Обновляем пакет ==== | ||
- | + | Допустим апстрим выпустил новую версию продукта. | |
- | * Скачаем со свеого | + | * Скачаем со свеого репозитория старую версию: |
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
$ git clone git.alt:/people/stanv/packages/openct_current.git | $ git clone git.alt:/people/stanv/packages/openct_current.git | ||
Строка 99: | Строка 98: | ||
<pre>13:29 < Lost> ну посмотри, есть ли реально этот файл в дереве | <pre>13:29 < Lost> ну посмотри, есть ли реально этот файл в дереве | ||
- | 13:29 < Lost> git | + | 13:29 < Lost> git ls-tree HEAD |
13:40 < stanv> а как удалит все файлы которые не занесены в репозиторий? | 13:40 < stanv> а как удалит все файлы которые не занесены в репозиторий? | ||
- | 13:41 < wRAR> git | + | 13:41 < wRAR> git clean</pre> |
<pre>15:11 < Lost> stanv: а зачем там этот .empty? | <pre>15:11 < Lost> stanv: а зачем там этот .empty? | ||
Строка 111: | Строка 110: | ||
15:20 < stanv> Lost: Как ? | 15:20 < stanv> Lost: Как ? | ||
15:20 < Lost> stanv: делаешь временную директорию рядом | 15:20 < Lost> stanv: делаешь временную директорию рядом | ||
- | 15:21 < Lost> stanv: делаешь там git | + | 15:21 < Lost> stanv: делаешь там git init |
15:21 < Lost> stanv: добавляешь спек и .gear-rules | 15:21 < Lost> stanv: добавляешь спек и .gear-rules | ||
- | 15:21 < Lost> делаешь git | + | 15:21 < Lost> делаешь git add, git commit |
15:21 < Lost> получаешь там ветку master | 15:21 < Lost> получаешь там ветку master | ||
- | 15:21 < Lost> потом идешь в свой репо. удаляешь там ветку master и делаешь git | + | 15:21 < Lost> потом идешь в свой репо. удаляешь там ветку master и делаешь git pull ../temp master:master |
15:22 < Lost> и того - у тебя в репо есть два корневых коммита | 15:22 < Lost> и того - у тебя в репо есть два корневых коммита | ||
15:22 < Lost> первый - апстрим. второй - master | 15:22 < Lost> первый - апстрим. второй - master | ||
Строка 126: | Строка 125: | ||
15:40 < Lost> дерево исходников upstream | 15:40 < Lost> дерево исходников upstream | ||
15:40 < Lost> второй корневой коммит - дерево со спеком и .gear-rules | 15:40 < Lost> второй корневой коммит - дерево со спеком и .gear-rules | ||
- | 15:41 < stanv> Lost: всеравно потом надо будет говорить в ветке master: git | + | 15:41 < stanv> Lost: всеравно потом надо будет говорить в ветке master: git pull -s ours . patches |
15:42 < Lost> stanv: и что? | 15:42 < Lost> stanv: и что? | ||
15:43 < stanv> Lost: ничего :) | 15:43 < stanv> Lost: ничего :) | ||
Строка 137: | Строка 136: | ||
==== Задача ==== | ==== Задача ==== | ||
- | Я узнал что у меня есть огромная семья... Кто-то нашептал, что в git лежит новая сборка пакета N. У меня есть дополнения к этому пакету. Хотелось бы склонировать чужой git- | + | Я узнал что у меня есть огромная семья... Кто-то нашептал, что в git лежит новая сборка пакета N. У меня есть дополнения к этому пакету. Хотелось бы склонировать чужой git-репозиторий, внести правки и отослать это мантейнеру. Как? |
Далее пакет N == ocsinventory-server | Далее пакет N == ocsinventory-server | ||
- | ==== Поиск git- | + | ==== Поиск git-репозитория на git.alt ==== |
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
ssh git.alt find-package ocsinventory-server | ssh git.alt find-package ocsinventory-server | ||
/people/raorn/packages/ocsinventory-server.git</source></div></div> | /people/raorn/packages/ocsinventory-server.git</source></div></div> | ||
- | ==== Создание клона | + | ==== Создание клона репозитория на git.alt ==== |
- | Теперь я создам себе клон raorn'овского | + | Теперь я создам себе клон raorn'овского репозитория на git.alt |
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
ssh git.alt clone /people/raorn/packages/ocsinventory-server ocsinventory-server</source></div></div> | ssh git.alt clone /people/raorn/packages/ocsinventory-server ocsinventory-server</source></div></div> | ||
Строка 163: | Строка 162: | ||
drwxr-sr-x 4 4096 Apr 14 19:36 refs</source></div></div> | drwxr-sr-x 4 4096 Apr 14 19:36 refs</source></div></div> | ||
- | ==== Получение git- | + | ==== Получение git-репозитория на локальную машину с git.alt ==== |
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
git clone git.alt:/people/barabashka/packages/ocsinventory-server.git | git clone git.alt:/people/barabashka/packages/ocsinventory-server.git | ||
Строка 174: | Строка 173: | ||
Receiving objects: 100% (3384/3384), 11.24 MiB | 661 KiB/s, done.</source></div></div> | Receiving objects: 100% (3384/3384), 11.24 MiB | 661 KiB/s, done.</source></div></div> | ||
- | Надо заметить, что я клонирую с git.alt не raorn'овский, а свой. Чтобы original-refs смотрели на мой | + | Надо заметить, что я клонирую с git.alt не raorn'овский, а свой. Чтобы original-refs смотрели на мой репозиторий, а не на raorn'овский. |
- | ==== Подключение удаленного | + | ==== Подключение удаленного репозитория с git.alt ==== |
- | Теперь подключаю raorn'овский | + | Теперь подключаю raorn'овский репозиторий как удаленный к себе на локальную машину |
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
git remote add alt-raorn-ocs git.alt:/people/raorn/packages/ocsinventory-server.git</source></div></div> | git remote add alt-raorn-ocs git.alt:/people/raorn/packages/ocsinventory-server.git</source></div></div> | ||
- | ==== Получение удаленного | + | ==== Получение удаленного репозитория raorn'а ==== |
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
git fetch alt-raorn-ocs | git fetch alt-raorn-ocs | ||
Строка 189: | Строка 188: | ||
==== Синхронизация branch'ей ==== | ==== Синхронизация branch'ей ==== | ||
+ | |||
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
git fetch alt-raorn-ocs 'refs/heads/*:refs/heads/*' | git fetch alt-raorn-ocs 'refs/heads/*:refs/heads/*' | ||
Строка 194: | Строка 194: | ||
* [new branch] stable_1_0_1 -> stable_1_0_1 | * [new branch] stable_1_0_1 -> stable_1_0_1 | ||
* [new branch] upstream -> upstream</source></div></div> | * [new branch] upstream -> upstream</source></div></div> | ||
+ | |||
+ | Если ругнётся так: | ||
+ | fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository | ||
+ | — следует сперва git checkout бранч, имя которого не совпадает с имеющимися в склонированном репозитории (см. тж. {{cmd|git branch -r}}. Или не злоупотреблять тотальной синхронизацией. | ||
==== Итого ==== | ==== Итого ==== | ||
Строка 218: | Строка 222: | ||
Далее вносятся изменения в локальные файлы, все это дело commit'ется. | Далее вносятся изменения в локальные файлы, все это дело commit'ется. | ||
- | Теперь можно отправлять их к себе в git- | + | Теперь можно отправлять их к себе в git-репозиторий на git.alt |
<div class="action"><div class="action-content"><source lang="css"> | <div class="action"><div class="action-content"><source lang="css"> | ||
git push | git push | ||
Строка 260: | Строка 264: | ||
$ git-push --tags git.alt:/people/stanv/packages/opensc_current.git | $ git-push --tags git.alt:/people/stanv/packages/opensc_current.git | ||
готово | готово | ||
- | |||
Happy end | Happy end | ||
- | |||
- | |||
[http://www.freesource.info/wiki/BranchInGit http://www.freesource.info/wiki/BranchInGit] | [http://www.freesource.info/wiki/BranchInGit http://www.freesource.info/wiki/BranchInGit] | ||
- | Если есть вопросы | + | Если есть вопросы — обращайтесь. |
{{Category navigation|title=git|category=git|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=git|category=git|sortkey={{SUBPAGENAME}}}} | ||
- | |||
- |
Текущая версия на 11:21, 9 апреля 2010
Создание на git.alt репозитория пакета
Цель: создать на git.alt репозиторий пакета
- Создаем локальный репозиторий
$ mkdir package.git $ cd package.git $ git init
- Создаем пустой файл. Для создания первого commit репозиторий должен быть не пустой.
$ touch .empty
- Создаем первый коммит
$ 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 или $ find libopensync/ -type d -empty -exec touch '{}/.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
- Обновляем до апстрима
$ gear-update
Заметки
13:29 < Lost> ну посмотри, есть ли реально этот файл в дереве 13:29 < Lost> git ls-tree HEAD 13:40 < stanv> а как удалит все файлы которые не занесены в репозиторий? 13:41 < wRAR> git clean
15:11 < Lost> stanv: а зачем там этот .empty? 15:17 < stanv> Lost: я не могу создать ветку пока нету initial commit 15:17 < Lost> stanv: можно прям сразу делать то, что ты хотел делать в ветке upstream, в ветке master 15:17 < Lost> stanv: чувак, ветки можно переименовывать, удалять, добавлять 15:18 < stanv> Lost: хочу чтобы ветка master содержала только spec .gear-rules и %Source{N} к пакету 15:19 < Lost> stanv: это делается по-другому 15:20 < stanv> Lost: Как ? 15:20 < Lost> stanv: делаешь временную директорию рядом 15:21 < Lost> stanv: делаешь там git init 15:21 < Lost> stanv: добавляешь спек и .gear-rules 15:21 < Lost> делаешь git add, git commit 15:21 < Lost> получаешь там ветку master 15:21 < Lost> потом идешь в свой репо. удаляешь там ветку master и делаешь git pull ../temp master:master 15:22 < Lost> и того - у тебя в репо есть два корневых коммита 15:22 < Lost> первый - апстрим. второй - master 15:29 < Lost> stanv: чтобы у тебя были две совершенно не связанные друг с другом ветки 15:33 < stanv> Lost: а первый коммит что собой будет представлять ? 15:39 < Lost> stanv: там два первых коммита будет 15:40 < stanv> Lost: ок, что собой представляет первый коммит No1 15:40 < stanv> ? 15:40 < stanv> upstream ? 15:40 < Lost> дерево исходников upstream 15:40 < Lost> второй корневой коммит - дерево со спеком и .gear-rules 15:41 < stanv> Lost: всеравно потом надо будет говорить в ветке master: git pull -s ours . patches 15:42 < Lost> stanv: и что? 15:43 < stanv> Lost: ничего :) 15:46 < Lost> stanv: в чем проблема то? 15:46 < Lost> stanv: ты сделал фиктивные два корня, за счет этого самого .emptyfile
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
Если ругнётся так:
fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository
— следует сперва git checkout бранч, имя которого не совпадает с имеющимися в склонированном репозитории (см. тж. git branch -r. Или не злоупотреблять тотальной синхронизацией.
Итого
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
Если есть вопросы — обращайтесь.