Участник:HihinRuslan/GitFaq: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Строка 73: Строка 73:
;Вопрос:
;Вопрос:
<source lang=text>
<source lang=text>
> И при каждом "git remote  update" получаем последние версии как в сизифе, так и у себя  на "свалке" на git.alt (очень полезно, когда хочется
И при каждом "git remote  update" получаем последние версии как в сизифе, так и у себя  на "свалке" на git.alt (очень полезно, когда хочется
> поработать и на работе, и дома продолжить, не таская всё на  флэшке).
поработать и на работе, и дома продолжить, не таская всё на  флэшке).
а вот с этого места поподробнее :
</source>
</source>
а вот с этого места поподробнее
;Ответ
Давайте возьмём к примеру пакет trilinos (я его новую версию уже вторую неделю ковыряю), но, допустим, я только начал, и у меня есть только новые исходники, но и только. Следующие действия были бы одинаковы и на работе, и дома:
1.
<source lang=bash>
git clone git.alt:packages/trilinos.git
cd trilinos
</source>
При этом "origin" создаётся автоматом, и источникм служит <code>git.alt:packages/trilinos.git</code>.
2. Подтягиваю себе то, что собрано в сизиф:
2a.
<source lang=bash>
git remote add gears git.alt:/gears/t/trilinos10.git
</source>
(исторически сложилось так, что суффикс у него 10, и я его не меняю, ибо при смене версии не ломается ABI).
2b.
<source lang=bash>
git remote update gears
</source>
3. Проверяю, не заливал ли кто обновлений:
<source lang=bash>
git merge gears/sisyphus
</source>
Если git сказал, что обновлений не найдено, значит, хорошо, если они были, разрулив конфликты,
4. тут же заливаю обновления себе на git.alt:
<source lang=bash>
git push --all origin
git push origin --follow-tags
</source>
Теперь представим, что я на работе, у меня тут скачаны новые исходники, я их положил, закоммитил, залил на <code>git.alt</code> (см. шаг 4).
Далее делаю всякие неизбежные вещи вроде правки спека, исходников и прочее.
Звенит будильник, говоря, что пора домой, а работа в самом разгаре. Делаю коммит всего, что натворил, заливаю на <code>git.alt</code> (см. шаг
4). Прихожу домой, захожу в каталог trilinos, делаю
<source lang=bash>
git remote update
git merge origin/master
</source>
Таким образом, всё, что на работе натворил, дома оказывается у меня под рукой. Дальше обычно делается diff того, что натворил на работе (кроме укладки новых исходников), убивается последний коммит, прикладывается сгенеренный diff, получается в точности ситуация, которая была к моменту звонка будильника.






[[КАТЕГОРИЯ:FAQ]] [[КАТЕГОРИЯ:Git]]
[[КАТЕГОРИЯ:FAQ]] [[КАТЕГОРИЯ:Git]]

Версия от 03:30, 25 марта 2015

FAQ по Git

на основе ответов в треде рассылки: http://lists.altlinux.org/pipermail/devel/2015-March/199617.html


Вопрос

Как залить в свой репозиторий git информацию из http://git.altlinux.org/srpms/q/qt4-fsarchiver.git

Ответ

Если хотите в слой локальный репозиторий залить, то примерно так:

git remote add srpms http://git.altlinux.org/srpms/q/qt4-fsarchiver.git
git remote update srpms
git merge srpms/sisyphus
Вопрос

Какие команды давать, если дальше собирать через git

Ответ

А если будете дальше собирать не через srpm, а именно через git.alt, то нужна будет ещё пара телодвижений:

git remote add gears http://git.altlinux.org/gears/q/qt4-fsarchiver.git

Когда впервые соберёте пакет через git.alt, gears будет доступен, и можно будет делать

git remote update gears
git merge gears/sisyphus

для того, чтобы не пропустить обновлений/правок от других членов team.


Вопрос

Я понял, что мне надо - мне надо, что-бы в http://git.altlinux.org/people/ruslandh/packages/ всегда лежала последняя версия моих пакетов, независимо от того, кто и когда их пересобирал,

Ответ

Тут немного не тот подход (я про git.alt). Последние версии _всех_ пакетов - это либо в git.alt:/gears , либо git.alt:/srpms (вот это, честно говоря, сильно напрягает, что изначально неизвестно, где именно из этих двух мест). А свои пакеты, те, что в http://git.altlinux.org/people/MYLOGIN/packages/ , это, вообще говоря, свалка не пойми чего, потому что контролирует это только один человек - MYLOGIN. Ну и синхронизировать версепоследнесть туда из gears/srpms должен именно MYLOGIN.


Вопрос

Желательно, что-бы была, при желании, возможность взять туда патчи из других git репозиториев.

Ответ

Тут всё просто, настраиваем свой локальный репозиторий ровно на два места (рассматриваю случай, когда пакет собирается из srpm): origin -> на свой репозиторий на git.alt, srpms - на git.alt:/srpms/что-там-у-нас-за-пакет.git .

И при каждом

git remote update

получаем последние версии как в сизифе, так и у себя на "свалке" на git.alt (очень полезно, когда хочется поработать и на работе, и дома продолжить, е таская всё на флэшке).


Вопрос

Как сделать так, что-бы мой локальный репозиторий был настроен брать оттуда, и туда кидал, без этих "шаманских манипуляций" с origin.

Ответ

origin достаточно настроить только один раз, потом вообще про существование .git/config можно забыть. До момента, пока сборка из srpm не превратится в сборку из git.alt.


Вопрос
И при каждом "git remote  update" получаем последние версии как в сизифе, так и у себя  на "свалке" на git.alt (очень полезно, когда хочется
поработать и на работе, и дома продолжить, не таская всё на  флэшке).

а вот с этого места поподробнее

Ответ

Давайте возьмём к примеру пакет trilinos (я его новую версию уже вторую неделю ковыряю), но, допустим, я только начал, и у меня есть только новые исходники, но и только. Следующие действия были бы одинаковы и на работе, и дома:

1.

git clone git.alt:packages/trilinos.git
cd trilinos

При этом "origin" создаётся автоматом, и источникм служит git.alt:packages/trilinos.git.

2. Подтягиваю себе то, что собрано в сизиф:

2a.

git remote add gears git.alt:/gears/t/trilinos10.git

(исторически сложилось так, что суффикс у него 10, и я его не меняю, ибо при смене версии не ломается ABI).

2b.

git remote update gears

3. Проверяю, не заливал ли кто обновлений:

git merge gears/sisyphus

Если git сказал, что обновлений не найдено, значит, хорошо, если они были, разрулив конфликты,

4. тут же заливаю обновления себе на git.alt:

git push --all origin
git push origin --follow-tags


Теперь представим, что я на работе, у меня тут скачаны новые исходники, я их положил, закоммитил, залил на git.alt (см. шаг 4). Далее делаю всякие неизбежные вещи вроде правки спека, исходников и прочее. Звенит будильник, говоря, что пора домой, а работа в самом разгаре. Делаю коммит всего, что натворил, заливаю на git.alt (см. шаг 4). Прихожу домой, захожу в каталог trilinos, делаю

git remote update
git merge origin/master

Таким образом, всё, что на работе натворил, дома оказывается у меня под рукой. Дальше обычно делается diff того, что натворил на работе (кроме укладки новых исходников), убивается последний коммит, прикладывается сгенеренный diff, получается в точности ситуация, которая была к моменту звонка будильника.