On Sun, Feb 04, 2007 at 12:10:11PM +0200, Nick S. Grechukh wrote: > с гит разобрался, разбираюсь с gear. кажется, вполне реально держать > сторонние патчи в отдельных topic branch и научить .gear-rules делать > из них диффы. С этим есть только одна проблема, для которой совершенно не видно решения: что делать, если изменения, вносимые несколькими различными патчами, пересекаются? В общем случае может понадобиться при объединении нескольких бранчей делать нетривиальные изменения (даже в случае, когда явных конфликтов вроде бы нет - например, один патч может менять какой-то интерфейс и исправлять код, где этот интерфейс использовался, а другой - добавлять новый модуль, пользующийся этим интерфейсом; в этом случае при объединении этих патчей потребуется модифицировать и этот новый модуль). > непонятно сейчас ровно одно: > > пусть в бранче upstream лежит xmms-1.2.1. из него я делаю бранч > rusxmms и через patch < rusxmms.patch прикладываю. > в master я делаю pull . upstream, и в .gear-rules говорю делать дифф > upstream-rusxmms. или master-rusxmms? в .src.rpm оно лежит отдельным > патчем. отлично. Отдельным патчем не получится (разве что этот бранч там единственный, и заведён только с целью не класть файлы типа .gear-rules и *.spec в дифф). В общем случае получится только один патч со всеми изменениями (например, diff: @version@:. .). > в какой-то момент git fetch upstream вытягивает мне 1.2.3. что я > должен сделать - > git checkout master и опять git pull . upstream ? а что потом делать с > бранчем rusxmms - rebase что ли? иначе ведь дифф будет содержать откат > с upstream-1.2.3 до rusxmms-1.2.1. Зависит от того, что произошло с патчем и апстримом. Например, можно просто смержить новую версию апстрима в этот бранч - так имеет смысл сделать, если обновлённого патча для этой версии апстрима пока не существует. Если же есть новый патч, можно откатить в бранче коммит, накладывавший предыдущую версию патча (чтобы не возиться с конфликтами, которые всё равно устранены в новом патче), смержить новую версию (в данном случае это будет trivial merge), после чего наложить обновлённый патч. Сразу мержить новую версию апстрима в master в принципе необязательно (иначе при наличии конфликтов их все придётся разгребать одной большой кучей). Возможно, придётся сначала вышеописанным способом перевести все бранчи на новую версию, потом смержить нужные бранчи в какой-то newmaster, и только потом мержить этот newmaster в master.