Як легко переробляти всі залежні гілки, якщо я змінив одну з гілок, в якій вони залежать?

Я намагаюся знайти гарне рішення з використанням git для гнучкого управління великим проектом для різних платформ, клієнтів, функцій ...

Як простий приклад (щоб зрозуміти, що це моя проблема, але насправді вона буде більш складною), мабуть, у мене є майстер гілки, я додаю все загальне джерело. З неї я створюю гілки для різних операційних систем, таких як win (для Windows), gnu (для GNU) і т. Д., І гілки для будь-якої функції, яку клієнт може вимагати чи ні (для полегшення, я називаю їх client_a і client_b).

* client_b
| * client_a
|/
| * gnu
|/
| * win
|/
* master

Таким чином, якщо один клієнт вимагає для програми, що працює в Windows, з функціями, які я виконував у filial client_b, я можу створити гілку (winB) з гілки 'win' як:

git checkout -b winB
git merge client_b

Ця нова гілка буде містити всі функції, включені в client_b, і буде готова для генерації програми Win, принаймні це моє намір. Проблема полягає в тому, що це робити, якщо я хочу виправити помилку або додати більше коду у гілку client_b, і я хочу, щоб winB та всі інші гілки в залежності від client_b отримували це і зміни, я повинен йти по черзі робити щось подібне ( це конкретний випадок для winB)

git rebase client_b
git merge win

Зауважте, що це навіть найгірше, коли я повинен додати щось нове в майстер, де все залежить від! Отже, на моє запитання, з урахуванням цього сценарію, як би ви впоралися з цими галузями та легко отримували результати злиття (winB у нашому випадку), не переходячи один з одним з цих гілок, переплавляючи і зливаючись знову? Також вітаються пропозиції щодо інших кращих сценаріїв досягнення цього.

Спасибі заздалегідь!

1

1 Відповіді

У вас є кілька варіантів.

По-перше, якщо гілки клієнтського коду використовуються де-небудь ще (хтось інший кодує їх), то ви не повинні використовувати rebase. rebase переписує історію, включаючи SHA1, і може викликати багато горя, якщо інші люди покладаються на історію.

Перший варіант полягає в тому, щоб створити патчі функції та застосувати його до гілок, для яких потрібна ця функція.

Другий - це вишня, щоб вибирати обкладинки в гілки, де ви їх хочете.

Третій - це просто злити зміни, хоча це не спрацює, якщо деякі з ваших гілок відійшли від майстра, щоб увімкнути локальну функцію (наприклад, для Windows).

Я б вибрав патч чи вишню вибрати і написати сценарій, який дозволить автоматизувати цей процес для певної галузі або груп галузей.

Наприклад:

apply_patches_fабо_win windows-feature.patch

або

cherry_pick_fабо_win commit_SHA1

Ви також можете написати сценарій для переробки гілок, якщо rebase - це ще найкращий варіант.

0
додано