Участник:HihinRuslan/GitFaq: различия между версиями
(не показано 20 промежуточных версий этого же участника) | |||
Строка 2: | Строка 2: | ||
на основе ответов в треде рассылки: | на основе ответов в треде рассылки: | ||
http://lists.altlinux.org/pipermail/devel/2015-March/199617.html | 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 информацию из http://git.altlinux.org/srpms/q/qt4-fsarchiver.git | ||
Строка 17: | Строка 29: | ||
</source> | </source> | ||
==== Какие команды давать, если дальше собирать через git ==== | |||
;Вопрос: | ;Вопрос: | ||
Какие команды давать, если дальше собирать через git | Какие команды давать, если дальше собирать через git | ||
;Ответ | ;Ответ | ||
А если будете дальше собирать не через srpm, а именно через git.alt, | |||
то нужна будет ещё пара телодвижений: | то нужна будет ещё пара телодвижений: | ||
Строка 38: | Строка 51: | ||
для того, чтобы не пропустить обновлений/правок от других членов team. | для того, чтобы не пропустить обновлений/правок от других членов 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 . | |||
И при каждом | |||
<source lang=bash> | |||
git remote update | |||
</source> | |||
получаем последние версии как в сизифе, так и у себя на "свалке" на git.alt (очень полезно, когда хочется поработать и на работе, и дома продолжить, е таская всё на флэшке). | |||
==== Как правильно настроить remote ==== | |||
;Вопрос | |||
Как сделать так, что-бы мой локальный репозиторий был настроен брать оттуда, и туда кидал, без этих "шаманских манипуляций" с origin. | |||
;Ответ | |||
origin достаточно настроить только один раз, потом вообще про существование <code>.git/config</code> можно забыть. До момента, пока сборка из | |||
srpm не превратится в сборку из git.alt. | |||
;Вопрос: | |||
<source lang=text> | |||
И при каждом "git remote update" получаем последние версии как в сизифе, так и у себя на "свалке" на git.alt (очень полезно, когда хочется | |||
поработать и на работе, и дома продолжить, не таская всё на флэшке). | |||
</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, получается в точности ситуация, которая была к моменту звонка будильника. | |||
;Вопрос | |||
А как посмотреть, "что приплыло"? | |||
:Ответ | |||
А вот если Вы на десктопе сидите, то можно и поудобней: | |||
<source lang=bash> | |||
gitk --all | |||
</source> | |||
И смотрите через GUI, что, где и как. | |||
==== Как имортировать только историю пакета ==== | |||
;Вопрос | |||
ещё проблема - у меня в локальном репозитоии самая новая версия (то, что я подправил), но у неё может не быть истории, мне-бы историю от Сизифа только взять, что-бы потом ругани не было на неправильно наследование. | |||
;Ответ | |||
В два шага: | |||
1. | |||
<source lang=bash> | |||
git merge srpms/sisyphus -s ours -m "Fake merge with srpms/sispyphus" | |||
</source> | |||
Параметр <code>"-s ours"</code> копирует только историю, но не сами изменения. | |||
2. В спеке не забудьте в раздел <code>%changelog</code> добавить то, что | |||
наплодилось в <code>%changelog</code> реального пакета. Проще всего глянуть прямо | |||
на месте: | |||
<source lang=bash> | |||
git show srpms/sisyphus:qt4-fsarchiver.spec | |||
</source> | |||
;Вопрос | |||
Как добавить 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 | |||
==== Как откатить неправильные действия ==== | |||
;Вопрос | |||
Как удалить неправильный тэг | |||
;Ответ | |||
В удалённом репозитории: | |||
<source lang=bash> | |||
git push origin :1.6-alt1 | |||
</source> | |||
В локальном: | |||
Удалить: | |||
<source lang=bash> | |||
git tag -d 1.6-alt1 | |||
</source> | |||
Переместить в текущую позицию: | |||
<source lang=bash> | |||
git tag -f 1.6-alt1 | |||
</source> | |||
==== Выдало ошибку, что делать ==== | |||
;Вопрос | |||
Выдало: | |||
<source lang=bash> | |||
$ 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 | |||
..... | |||
</source> | |||
;Ответ | |||
Выполните: | |||
<source lang=bash> | |||
git config --global push.default matching | |||
</source> | |||
[[КАТЕГОРИЯ:FAQ]] [[КАТЕГОРИЯ:Git]] | [[КАТЕГОРИЯ:FAQ]] [[КАТЕГОРИЯ:Git]] |
Текущая версия от 10:00, 28 июня 2015
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