beldmit: (Программизм)
[personal profile] beldmit
Наблюдаю в дружественной конторе следующую ситуацию:

1. Есть продукт, который они пилят. С выпускаемыми версиями и прочим. При выпуске новой версии upstream-ом на неё надо переходить.

2. Есть большой патч к этому продукту разработки собственно этой конторы. Его необходимо всегда иметь в актуальном виде одним куском. Применяться он должен к апстриму.

3. Есть набор патчей третьей стороны, который должен жить отдельными кусочками, но попадать в итоговую сборку. Поштучно.

Как этот РАБКРИН лучше обустроить?

Мне в голову приходит сценарий с двумя ветками, соответствующими пп. 2 и 3, с периодическими git rebase сначала ветки со своими патчами на апстрим, а потом ветки с патчами третьей стороны - на то, что получилось в "своей" ветке. Или я неправильно понимаю, что есть git rebase?

Date: 2015-02-09 12:32 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Как-то так, да. Если (3) разрабатывается на основе (2). Если наоборот, то, соответственно, порядок ребейсов меняется на обратный. Если (3) и (2) оба разрабатываются независимо на основе апстрима, то, возможно, ребейс (2) и (3) на голову апстрима, а потом мёрж их обоих с образованием отдельной ветки и разруливанием мёрж-конфликтов.

Возможно, большой патч потом захочет стать серией мелких патчей.

Date: 2015-02-09 12:39 pm (UTC)
ext_605364: geg MOPO4 (geg_MOPO4)
From: [identity profile] gegmopo4.livejournal.com
Не три? Или даже четыре?

Date: 2015-02-09 01:42 pm (UTC)
ext_605364: geg MOPO4 (geg_MOPO4)
From: [identity profile] gegmopo4.livejournal.com
Одна ветка — ванилла (п.1). В неё выкладываются свежие версии апстрима и больше никаких изменений. После этого ответвляется ветка для сторонних патчей (п.3). Когда они наложены, ответвляется ветка для своих патчей (п.3). Если приходят новые сторонние патчи, они накладываются на вторую ветку и мержатс в третью. Когда выходит новая версия, обновляется первая ветка, от неё ответвляется новая вторая ветка, на которую заново накладываются сторонние патчи (или сразу мержатся из старой второй), от которой ответвляется новая третья ветка, в которую мержится старая третья ветка. В любой момент доступны апстрим, апстрим со сторонними патчами и со всеми патчами для любой версии. Если новый апстрим окажется слишком ломаным, всегда можно откатиться на старую версию со всеми патчами и продолжить накладывать свои изменения, пока апстрим не починят.

Если сторонние и свои патчи мало пересекаются и независимы, можно в третьей ветке (ответвляемой от второй) поддерживать только свои изменения, а мержить вторую с третьей в четвёртой.

Но может быть git не так работает, я с точки зрения svn и hg.

Date: 2015-02-09 03:34 pm (UTC)
From: [identity profile] besm6.livejournal.com
vanilla есть и так.

Date: 2015-02-09 03:33 pm (UTC)
From: [identity profile] besm6.livejournal.com
С первым очень похоже на правду. Особенно - если точная история своих патчей не слишком актуальна.

А вот с патчами третьей стороны, если они поштучные, веселее. Их тогда и хранить надо поштучно. Возможно - по ветке на каждый патч, с периодическими rebase на свою ветку.

А при наложении, соответственно, git diff каждой из этих веток, и наложение результирующих патчей.

Profile

beldmit: (Default)
Dmitry Belyavskiy

December 2025

S M T W T F S
 123456
78910111213
14151617181920
2122 2324252627
28 29 3031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 10th, 2026 11:46 am
Powered by Dreamwidth Studios