Участник:HihinRuslan/GitFaq

Материал из ALT Linux Wiki

FAQ по Git

на основе ответов в треде рассылки:

http://lists.altlinux.org/pipermail/devel/2015-March/199617.html

Если автор ответа не указан, то предполагается, что это real@

А у нас ни у кого ещё нет никаких полезных аллиасов?

Вопрос

Почитал в праздники http://githowto.com/ru, и понравились мне её аллиасы для git (11-я главка), особенно git hist, type и dump. А у нас ни у кого ещё нет никаких полезных аллиасов? Особенно для работы с gear и сизифовским git? А то каждый подход к нему у меня сопровождается перекапыванием теории

Ответ (lav@)

Я пользуюсь такими командами:

https://github.com/vitlav/giter

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

Вопрос

Как залить в свой репозиторий 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

Вопрос

Какие команды давать, если дальше собирать через 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.

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

Вопрос

Я понял, что мне надо - мне надо, что-бы в 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 (очень полезно, когда хочется поработать и на работе, и дома продолжить, е таская всё на флэшке).

Как правильно настроить remote

Вопрос

Как сделать так, что-бы мой локальный репозиторий был настроен брать оттуда, и туда кидал, без этих "шаманских манипуляций" с 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, получается в точности ситуация, которая была к моменту звонка будильника.

Вопрос

А как посмотреть, "что приплыло"?

Ответ

А вот если Вы на десктопе сидите, то можно и поудобней:

gitk --all

И смотрите через GUI, что, где и как.

Как имортировать только историю пакета

Вопрос

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

Ответ

В два шага:

1.

git merge srpms/sisyphus -s ours -m "Fake merge with srpms/sispyphus"

Параметр "-s ours" копирует только историю, но не сами изменения.

2. В спеке не забудьте в раздел %changelog добавить то, что наплодилось в %changelog реального пакета. Проще всего глянуть прямо на месте:

git show srpms/sisyphus:qt4-fsarchiver.spec


Вопрос

Как добавить remote из gears

Ответ (mike@a)

Например, стоя в каталоге верхнего уровня нужного гита:


g="$(basename `pwd`)"; git remote add gears git://git.altlinux.org/gears/${g:0:1}/$g.git; git remote update gears

Как откатить неправильные действия

Вопрос

Как удалить неправильный тэг

Ответ

В удалённом репозитории:

git push origin :1.6-alt1

В локальном:

Удалить:

git tag -d 1.6-alt1

Переместить в текущую позицию:

git tag -f 1.6-alt1

Выдало ошибку, что делать

Вопрос

Выдало:

$ git push --follow-tag  origin
warning: push.default is unset; its implicit value has changed in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the traditional behavior, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

.....
Ответ

Выполните:

git config --global push.default matching