Участник:HihinRuslan/GitFaq
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