* [devel] git -- хитрая задачка
@ 2010-08-24 8:31 Денис Смирнов
2010-08-24 9:17 ` Андрей Черепанов
` (2 more replies)
0 siblings, 3 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 8:31 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 972 bytes --]
Имеется множество git-репозиториев (около тысячи).
Большая часть их них -- устаревшие backup'ы, но какие определить
по имени или еще каким-либо очевидным характеристикам невозможно.
Разобраться в этом кошмаре вручную -- тем более.
Задача -- выявить и удалить старье (которого там процентов 90).
Лобовое решение: прогнать для каждого бранча каждого репозитория git log,
положить результат в sqlite (commit id/путь к репо/бранч). Также положить
в базу последний commit id каждого бранча каждого репозитория.
После этого я могу легко определить есть ли такой commit id в другом
репозитории. И если есть, и это не последний коммит в бранче -- то наш
бранч явно стухший и его можно удалить.
Такое решение мне не нравится тем, что придется строить базу по миллионам
commit'ов.
Можно ли придумать что-то значительно шустрее?
--
С уважением, Денис
http://mithraen.ru/
----------------------------------------------------------------------------
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 8:31 [devel] git -- хитрая задачка Денис Смирнов
@ 2010-08-24 9:17 ` Андрей Черепанов
2010-08-24 9:40 ` Денис Смирнов
2010-08-24 9:39 ` Alexander Myltsev
2010-08-24 9:53 ` Dmitry V. Levin
2 siblings, 1 reply; 23+ messages in thread
From: Андрей Черепанов @ 2010-08-24 9:17 UTC (permalink / raw)
To: ALT Linux Team development discussions
24 августа 2010 Денис Смирнов написал:
> Имеется множество git-репозиториев (около тысячи).
> Большая часть их них -- устаревшие backup'ы, но какие определить
> по имени или еще каким-либо очевидным характеристикам невозможно.
> Разобраться в этом кошмаре вручную -- тем более.
>
> Задача -- выявить и удалить старье (которого там процентов 90).
>
> Лобовое решение: прогнать для каждого бранча каждого репозитория git log,
> положить результат в sqlite (commit id/путь к репо/бранч). Также положить
> в базу последний commit id каждого бранча каждого репозитория.
>
> После этого я могу легко определить есть ли такой commit id в другом
> репозитории. И если есть, и это не последний коммит в бранче -- то наш
> бранч явно стухший и его можно удалить.
>
> Такое решение мне не нравится тем, что придется строить базу по миллионам
> commit'ов.
>
> Можно ли придумать что-то значительно шустрее?
Как насчёт даты последней модификации?
--
Андрей Черепанов
ALT Linux
cas@altlinux.ru
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 8:31 [devel] git -- хитрая задачка Денис Смирнов
2010-08-24 9:17 ` Андрей Черепанов
@ 2010-08-24 9:39 ` Alexander Myltsev
2010-08-24 9:42 ` Денис Смирнов
2010-08-24 9:53 ` Dmitry V. Levin
2 siblings, 1 reply; 23+ messages in thread
From: Alexander Myltsev @ 2010-08-24 9:39 UTC (permalink / raw)
To: ALT Linux Team development discussions
2010/8/24 Денис Смирнов <mithraen@altlinux.ru>:
> Такое решение мне не нравится тем, что придется строить базу по миллионам
> commit'ов.
Миллион вроде не очень большое число (см. "мегагерц", "мегабайт"). Я
бы попробовал.
> Можно ли придумать что-то значительно шустрее?
Можно воспользоваться тем, что родственные репозитории всегда имеют
общие корни (коммиты без родителей). То есть сначала находим во всех
репозиториях все корни, а потом решаем задачу только в "родственных
группах". (Правда, будет ли это сильно шустрее -- неизвестно.)
--
AVM
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 9:17 ` Андрей Черепанов
@ 2010-08-24 9:40 ` Денис Смирнов
0 siblings, 0 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 9:40 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 298 bytes --]
On Tue, Aug 24, 2010 at 01:17:38PM +0400, Андрей Черепанов wrote:
АЧ> Как насчёт даты последней модификации?
Она не позволит выявить связаны репозитории или нет.
--
С уважением, Денис
http://mithraen.ru/
----------------------------------------------------------------------------
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 9:39 ` Alexander Myltsev
@ 2010-08-24 9:42 ` Денис Смирнов
2010-08-24 9:47 ` Alexander Myltsev
2010-08-24 9:49 ` Andrey Rahmatullin
0 siblings, 2 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 9:42 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 891 bytes --]
On Tue, Aug 24, 2010 at 01:39:31PM +0400, Alexander Myltsev wrote:
AM> Миллион вроде не очень большое число (см. "мегагерц", "мегабайт"). Я
AM> бы попробовал.
Просто все алгоритмы которые мне приходили в голову отнюдь не линейные по
количеству необходимых операций от количества репозиториев.
AM> Можно воспользоваться тем, что родственные репозитории всегда имеют
AM> общие корни (коммиты без родителей). То есть сначала находим во всех
AM> репозиториях все корни, а потом решаем задачу только в "родственных
AM> группах". (Правда, будет ли это сильно шустрее -- неизвестно.)
Это гениально! Спасибо! В родственных группах можно уже не строить базу.
А есть ли какой то способ зная id коммита определить есть ли он в истории
некоего коммита?
--
С уважением, Денис
http://mithraen.ru/
----------------------------------------------------------------------------
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 9:42 ` Денис Смирнов
@ 2010-08-24 9:47 ` Alexander Myltsev
2010-08-24 9:49 ` Andrey Rahmatullin
1 sibling, 0 replies; 23+ messages in thread
From: Alexander Myltsev @ 2010-08-24 9:47 UTC (permalink / raw)
To: ALT Linux Team development discussions
2010/8/24 Денис Смирнов <mithraen@altlinux.ru>:
> В родственных группах можно уже не строить базу.
>
> А есть ли какой то способ зная id коммита определить есть ли он в истории
> некоего коммита?
Нет, базу строить всё-таки придётся :-).
--
AVM
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 9:42 ` Денис Смирнов
2010-08-24 9:47 ` Alexander Myltsev
@ 2010-08-24 9:49 ` Andrey Rahmatullin
2010-08-24 9:58 ` Dmitry V. Levin
2010-08-24 17:58 ` Денис Смирнов
1 sibling, 2 replies; 23+ messages in thread
From: Andrey Rahmatullin @ 2010-08-24 9:49 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 463 bytes --]
On Tue, Aug 24, 2010 at 01:42:47PM +0400, Денис Смирнов wrote:
> А есть ли какой то способ зная id коммита определить есть ли он в истории
> некоего коммита?
git merge-base первый второй
Вернёт "первый", если он является предком второго. МОжет есть проще, не
знаю.
--
WBR, wRAR (ALT Linux Team)
Powered by the ALT Linux fortune(6):
В локалке шифрование тоже не помешает.
Популяция ангелов в локалке очень малочисленна.
-- mrkooll in community@
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 8:31 [devel] git -- хитрая задачка Денис Смирнов
2010-08-24 9:17 ` Андрей Черепанов
2010-08-24 9:39 ` Alexander Myltsev
@ 2010-08-24 9:53 ` Dmitry V. Levin
2010-08-24 11:35 ` Денис Смирнов
2 siblings, 1 reply; 23+ messages in thread
From: Dmitry V. Levin @ 2010-08-24 9:53 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 1096 bytes --]
On Tue, Aug 24, 2010 at 12:31:38PM +0400, Денис Смирнов wrote:
> Имеется множество git-репозиториев (около тысячи).
> Большая часть их них -- устаревшие backup'ы, но какие определить
> по имени или еще каким-либо очевидным характеристикам невозможно.
> Разобраться в этом кошмаре вручную -- тем более.
>
> Задача -- выявить и удалить старье (которого там процентов 90).
>
> Лобовое решение: прогнать для каждого бранча каждого репозитория git log,
> положить результат в sqlite (commit id/путь к репо/бранч). Также положить
> в базу последний commit id каждого бранча каждого репозитория.
>
> После этого я могу легко определить есть ли такой commit id в другом
> репозитории. И если есть, и это не последний коммит в бранче -- то наш
> бранч явно стухший и его можно удалить.
Самый лобовой способ: зафетчить в каждый репозиторий соответствующий ему
"другой", апстримный репозиторий, после чего пройтись git for-each-ref'ом
по refs/heads и выяснить (git log -n1 --pretty=format:1 ^l_ref r_ref),
есть ли в репозитории хотя бы один актуальный локальный бранч.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 9:49 ` Andrey Rahmatullin
@ 2010-08-24 9:58 ` Dmitry V. Levin
2010-08-24 18:00 ` Денис Смирнов
2010-08-24 17:58 ` Денис Смирнов
1 sibling, 1 reply; 23+ messages in thread
From: Dmitry V. Levin @ 2010-08-24 9:58 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 467 bytes --]
On Tue, Aug 24, 2010 at 03:49:07PM +0600, Andrey Rahmatullin wrote:
> On Tue, Aug 24, 2010 at 01:42:47PM +0400, Денис Смирнов wrote:
> > А есть ли какой то способ зная id коммита определить есть ли он в истории
> > некоего коммита?
> git merge-base первый второй
> Вернёт "первый", если он является предком второго. МОжет есть проще, не
> знаю.
http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob;f=gb-task-check-girar#l13
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 9:53 ` Dmitry V. Levin
@ 2010-08-24 11:35 ` Денис Смирнов
2010-08-24 11:41 ` Alexander Myltsev
` (2 more replies)
0 siblings, 3 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 11:35 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 754 bytes --]
On Tue, Aug 24, 2010 at 01:53:49PM +0400, Dmitry V. Levin wrote:
DVL> Самый лобовой способ: зафетчить в каждый репозиторий соответствующий ему
DVL> "другой", апстримный репозиторий, после чего пройтись git for-each-ref'ом
DVL> по refs/heads и выяснить (git log -n1 --pretty=format:1 ^l_ref r_ref),
DVL> есть ли в репозитории хотя бы один актуальный локальный бранч.
Хотелось бы во время всех этих проверок не модифицировать сами
репозитории. Хотя можно, конечно, копии делать...
А есть способ просто ответить на вопрос "есть ли в этом репозитории коммит
с таким-то id, и если есть, то в истории каких бранчей"?
--
С уважением, Денис
http://mithraen.ru/
----------------------------------------------------------------------------
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 11:35 ` Денис Смирнов
@ 2010-08-24 11:41 ` Alexander Myltsev
2010-08-24 17:48 ` Денис Смирнов
2010-08-24 11:43 ` Andrey Rahmatullin
2010-08-24 11:52 ` Ildar Mulyukov
2 siblings, 1 reply; 23+ messages in thread
From: Alexander Myltsev @ 2010-08-24 11:41 UTC (permalink / raw)
To: ALT Linux Team development discussions
2010/8/24 Денис Смирнов <mithraen@altlinux.ru>:
> А есть способ просто ответить на вопрос "есть ли в этом репозитории коммит
> с таким-то id,
Конечно, коммит -- это просто такой объект. git show его.
> и если есть, то в истории каких бранчей"?
А вот чтобы найти его в истории бранча, надо спускаться к нему от верхушки.
--
AVM
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 11:35 ` Денис Смирнов
2010-08-24 11:41 ` Alexander Myltsev
@ 2010-08-24 11:43 ` Andrey Rahmatullin
2010-08-24 11:45 ` Денис Смирнов
2010-08-24 11:52 ` Ildar Mulyukov
2 siblings, 1 reply; 23+ messages in thread
From: Andrey Rahmatullin @ 2010-08-24 11:43 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 432 bytes --]
On Tue, Aug 24, 2010 at 03:35:10PM +0400, Денис Смирнов wrote:
> А есть способ просто ответить на вопрос "есть ли в этом репозитории коммит
> с таким-то id, и если есть, то в истории каких бранчей"?
git branch --contains
--
WBR, wRAR (ALT Linux Team)
Powered by the ALT Linux fortune(6):
Боюсь, статическая сборка объявлена ересью, и каждый, кто
пытается делать ее, будет подвержен анафеме.
-- morozov in sisyphus@
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 11:43 ` Andrey Rahmatullin
@ 2010-08-24 11:45 ` Денис Смирнов
0 siblings, 0 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 11:45 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 238 bytes --]
On Tue, Aug 24, 2010 at 05:43:04PM +0600, Andrey Rahmatullin wrote:
AR> git branch --contains
Спасибо!
--
С уважением, Денис
http://mithraen.ru/
----------------------------------------------------------------------------
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 11:35 ` Денис Смирнов
2010-08-24 11:41 ` Alexander Myltsev
2010-08-24 11:43 ` Andrey Rahmatullin
@ 2010-08-24 11:52 ` Ildar Mulyukov
2010-08-24 17:46 ` Денис Смирнов
2 siblings, 1 reply; 23+ messages in thread
From: Ildar Mulyukov @ 2010-08-24 11:52 UTC (permalink / raw)
To: devel
On 24.08.2010 17:35:10, Денис Смирнов wrote:
> On Tue, Aug 24, 2010 at 01:53:49PM +0400, Dmitry V. Levin wrote:
>
> DVL> Самый лобовой способ: зафетчить в каждый репозиторий
> соответствующий ему
> DVL> "другой", апстримный репозиторий, после чего пройтись git
> for-each-ref'ом
> DVL> по refs/heads и выяснить (git log -n1 --pretty=format:1 ^l_ref
> r_ref),
> DVL> есть ли в репозитории хотя бы один актуальный локальный бранч.
>
> Хотелось бы во время всех этих проверок не модифицировать сами
> репозитории. Хотя можно, конечно, копии делать...
есть замечательная вещь - git new-workdir. Как раз оно. Лежит в
git-contrib.
--
Ildar
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 11:52 ` Ildar Mulyukov
@ 2010-08-24 17:46 ` Денис Смирнов
0 siblings, 0 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 17:46 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 506 bytes --]
On Tue, Aug 24, 2010 at 05:52:26PM +0600, Ildar Mulyukov wrote:
IM> есть замечательная вещь - git new-workdir. Как раз оно. Лежит в
IM> git-contrib.
При любой модификации копии репозитория будет модифицирован оригинал. Ибо
new-workdir просто делает симлинки на все подряд, кроме HEAD и index.
В принципе можно использовать git clone -s --bare -- это будет быстро.
--
С уважением, Денис
http://mithraen.ru/
----------------------------------------------------------------------------
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 11:41 ` Alexander Myltsev
@ 2010-08-24 17:48 ` Денис Смирнов
0 siblings, 0 replies; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 17:48 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 429 bytes --]
On Tue, Aug 24, 2010 at 03:41:13PM +0400, Alexander Myltsev wrote:
AM> Конечно, коммит -- это просто такой объект. git show его.
Спасибо.
AM> А вот чтобы найти его в истории бранча, надо спускаться к нему от верхушки.
т.е:
git log --oneline --abbrev=40 <branch> | grep ^commit-id
?
--
С уважением, Денис
http://mithraen.ru/
----------------------------------------------------------------------------
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 9:49 ` Andrey Rahmatullin
2010-08-24 9:58 ` Dmitry V. Levin
@ 2010-08-24 17:58 ` Денис Смирнов
2010-08-24 18:54 ` Sergey Vlasov
1 sibling, 1 reply; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 17:58 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 759 bytes --]
On Tue, Aug 24, 2010 at 03:49:07PM +0600, Andrey Rahmatullin wrote:
AR> git merge-base первый второй
AR> Вернёт "первый", если он является предком второго. МОжет есть проще, не
AR> знаю.
70ms для репо с >8k коммитов лежащем в дисковом кэше.
Да еще и код ошибки возвращает (0 -- если нашел, 1 -- если объект есть но
в другом бранче, 128+матюк об ошибке -- если такого объекта нет в репо).
Проще уже разве что со встроенным телепатическим модулем. Спасибо!
Для того чтобы найти "корень" (первый коммит) бранча что-нибудь проще чем:
git log --oneline --first-parent --abbrev=40 <branch> | tail -1
существует?
--
С уважением, Денис
http://mithraen.ru/
----------------------------------------------------------------------------
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 9:58 ` Dmitry V. Levin
@ 2010-08-24 18:00 ` Денис Смирнов
2010-08-24 20:18 ` Sergey Vlasov
0 siblings, 1 reply; 23+ messages in thread
From: Денис Смирнов @ 2010-08-24 18:00 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 489 bytes --]
On Tue, Aug 24, 2010 at 01:58:26PM +0400, Dmitry V. Levin wrote:
>> git merge-base первый второй
>> Вернёт "первый", если он является предком второго. МОжет есть проще, не
>> знаю.
DVL> http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob;f=gb-task-check-girar#l13
А чем это лучше git merge-base (при том что он код возврата дает)?
--
С уважением, Денис
http://mithraen.ru/
----------------------------------------------------------------------------
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 17:58 ` Денис Смирнов
@ 2010-08-24 18:54 ` Sergey Vlasov
2010-08-25 20:35 ` Денис Смирнов
0 siblings, 1 reply; 23+ messages in thread
From: Sergey Vlasov @ 2010-08-24 18:54 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 484 bytes --]
On Tue, Aug 24, 2010 at 09:58:25PM +0400, Денис Смирнов wrote:
> Для того чтобы найти "корень" (первый коммит) бранча что-нибудь проще чем:
>
> git log --oneline --first-parent --abbrev=40 <branch> | tail -1
>
> существует?
В общем случае таких корней может быть несколько (git позволяет
объединять независимо начатые ветки). Найти их можно, например, так:
git log --pretty=tformat:'%H:%P' | sed -ne 's/:$//p'
Например, в репозитории самого git таких коммитов 6.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 18:00 ` Денис Смирнов
@ 2010-08-24 20:18 ` Sergey Vlasov
2010-08-24 23:56 ` Dmitry V. Levin
0 siblings, 1 reply; 23+ messages in thread
From: Sergey Vlasov @ 2010-08-24 20:18 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 768 bytes --]
On Tue, Aug 24, 2010 at 10:00:17PM +0400, Денис Смирнов wrote:
> On Tue, Aug 24, 2010 at 01:58:26PM +0400, Dmitry V. Levin wrote:
>
> >> git merge-base первый второй
> >> Вернёт "первый", если он является предком второго. МОжет есть проще, не
> >> знаю.
> DVL> http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob;f=gb-task-check-girar#l13
>
> А чем это лучше git merge-base (при том что он код возврата дает)?
http://git.altlinux.org/people/ldv/packages/?p=gear.git;a=commitdiff;h=705d10e6596636220f65aa9c05f41a1ca69503de
Ну и, насколько я помню, в merge-all-branches из kernel-build-tools
аналогичный способ (точнее, через git rev-list --max-count=1) в
каких-то ситуациях работал существенно быстрее, чем через git
merge-base.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 20:18 ` Sergey Vlasov
@ 2010-08-24 23:56 ` Dmitry V. Levin
0 siblings, 0 replies; 23+ messages in thread
From: Dmitry V. Levin @ 2010-08-24 23:56 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 1844 bytes --]
On Wed, Aug 25, 2010 at 12:18:02AM +0400, Sergey Vlasov wrote:
> On Tue, Aug 24, 2010 at 10:00:17PM +0400, Денис Смирнов wrote:
> > On Tue, Aug 24, 2010 at 01:58:26PM +0400, Dmitry V. Levin wrote:
> >
> > >> git merge-base первый второй
> > >> Вернёт "первый", если он является предком второго. МОжет есть проще, не
> > >> знаю.
> > DVL> http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob;f=gb-task-check-girar#l13
> >
> > А чем это лучше git merge-base (при том что он код возврата дает)?
>
> http://git.altlinux.org/people/ldv/packages/?p=gear.git;a=commitdiff;h=705d10e6596636220f65aa9c05f41a1ca69503de
Там, кстати, в commit message вкралась опечатка, меняющая смысл.
> Ну и, насколько я помню, в merge-all-branches из kernel-build-tools
> аналогичный способ (точнее, через git rev-list --max-count=1) в
> каких-то ситуациях работал существенно быстрее, чем через git
> merge-base.
Да, я это тоже заметил.
Например, у меня в coreutils.git это выглядит так:
$ time git rev-list --max-count=1 ^master coreutils-current
0.00user 0.00system 0:00.00elapsed 160%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+494minor)pagefaults 0swaps
$ time git log -n1 --pretty=format:1 ^master coreutils-current > /dev/null
0.00user 0.00system 0:00.00elapsed 160%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+500minor)pagefaults 0swaps
$ time git merge-base coreutils-current master
1d10eb8b1eeff9dd0fe1bbbc212e9535203acff0
0.71user 0.01system 0:00.72elapsed 100%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+9166minor)pagefaults 0swaps
Судя по статистике minor pagefaults, git rev-list --max-count=1 немного
дешевле чем git log -n1 --pretty=format:1, и любой из них существенно
дешевле и гораздо быстрее чем git merge-base.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-24 18:54 ` Sergey Vlasov
@ 2010-08-25 20:35 ` Денис Смирнов
2010-08-26 11:51 ` Sergey Vlasov
0 siblings, 1 reply; 23+ messages in thread
From: Денис Смирнов @ 2010-08-25 20:35 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 640 bytes --]
On Tue, Aug 24, 2010 at 10:54:48PM +0400, Sergey Vlasov wrote:
SV> В общем случае таких корней может быть несколько (git позволяет
SV> объединять независимо начатые ветки). Найти их можно, например, так:
SV>
SV> git log --pretty=tformat:'%H:%P' | sed -ne 's/:$//p'
SV>
SV> Например, в репозитории самого git таких коммитов 6.
Спасибо!
А для того чтобы запросить корни от нескольких веток -- это решение
правильно отработает опцию --all для git log, или надо опрашивать каждую
ветку отдельно?
--
С уважением, Денис
http://mithraen.ru/
----------------------------------------------------------------------------
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [devel] git -- хитрая задачка
2010-08-25 20:35 ` Денис Смирнов
@ 2010-08-26 11:51 ` Sergey Vlasov
0 siblings, 0 replies; 23+ messages in thread
From: Sergey Vlasov @ 2010-08-26 11:51 UTC (permalink / raw)
To: devel
[-- Attachment #1: Type: text/plain, Size: 865 bytes --]
On Thu, Aug 26, 2010 at 12:35:49AM +0400, Денис Смирнов wrote:
> On Tue, Aug 24, 2010 at 10:54:48PM +0400, Sergey Vlasov wrote:
>
> SV> В общем случае таких корней может быть несколько (git позволяет
> SV> объединять независимо начатые ветки). Найти их можно, например, так:
> SV>
> SV> git log --pretty=tformat:'%H:%P' | sed -ne 's/:$//p'
> SV>
> SV> Например, в репозитории самого git таких коммитов 6.
>
> Спасибо!
> А для того чтобы запросить корни от нескольких веток -- это решение
> правильно отработает опцию --all для git log, или надо опрашивать каждую
> ветку отдельно?
Должно работать и с --all (правда, в результате окажутся смешанными и
действительно независимые ветки, которые могли быть в репозитории).
Есть ещё один вариант реализации (хотя скорость примерно одинаковая):
git rev-list --parents --all | grep -v ' '
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2010-08-26 11:51 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-24 8:31 [devel] git -- хитрая задачка Денис Смирнов
2010-08-24 9:17 ` Андрей Черепанов
2010-08-24 9:40 ` Денис Смирнов
2010-08-24 9:39 ` Alexander Myltsev
2010-08-24 9:42 ` Денис Смирнов
2010-08-24 9:47 ` Alexander Myltsev
2010-08-24 9:49 ` Andrey Rahmatullin
2010-08-24 9:58 ` Dmitry V. Levin
2010-08-24 18:00 ` Денис Смирнов
2010-08-24 20:18 ` Sergey Vlasov
2010-08-24 23:56 ` Dmitry V. Levin
2010-08-24 17:58 ` Денис Смирнов
2010-08-24 18:54 ` Sergey Vlasov
2010-08-25 20:35 ` Денис Смирнов
2010-08-26 11:51 ` Sergey Vlasov
2010-08-24 9:53 ` Dmitry V. Levin
2010-08-24 11:35 ` Денис Смирнов
2010-08-24 11:41 ` Alexander Myltsev
2010-08-24 17:48 ` Денис Смирнов
2010-08-24 11:43 ` Andrey Rahmatullin
2010-08-24 11:45 ` Денис Смирнов
2010-08-24 11:52 ` Ildar Mulyukov
2010-08-24 17:46 ` Денис Смирнов
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git