Jaki jest najlepszy przepływ pracy Git do pracy z projektem open source ze zmianami specyficznymi dla pracodawcy?

11

U mojego obecnego pracodawcy korzystamy z projektu open source hostowanego na Github jako komponentu naszej aplikacji. Pracowałem nad tym projektem, aby zarówno dodać kilka potrzebnych funkcji, jak i zintegrować go z naszymi systemami kompilacji. Mój menadżer i ja zgadzamy się, że chcielibyśmy przekazać tyle pracy nad tym komponentem, ile jest uzasadnione, z powrotem do projektu open source. Moje pytanie dotyczy tego, jaki jest najlepszy przepływ pracy / technika, aby utrzymać moje zatwierdzenia Git w taki sposób, że mogę łatwo oddzielić rzeczy, które mają sens, aby dodać je z powrotem do projektu open source - poprawki błędów i nowe funkcje, które są wystarczająco ogólne - z elementów specyficznych dla naszego projektu, takich jak lokalizacje kompilacji i stałe aplikacji.

Do tej pory zajmowałem się utrzymywaniem prywatnego oddziału Git, w którym zatwierdzam wszystkie moje zmiany, z odpowiednią szczegółowością. Następnie używam cherry-pickdo dodawania zatwierdzeń typu open source do gałęzi master i przesyłam je z powrotem do Github.

Wygląda na to, że powinienem używać do tego scalania, aby nie tworzyć oddzielnych zatwierdzeń o identycznej treści, ale nie jestem pewien, jak to zrobić, wyłączając zatwierdzenia specyficzne dla firmy i zachowując rozsądny przepływ pracy.

Na przykład, przypuszczam, że mógłbym zatwierdzić rzeczy z otwartym kodem źródłowym i elementy specyficzne dla firmy w oddziale prywatnym, a następnie scalić wzorzec do tej gałęzi w razie potrzeby, pozostawiając gałąź nadrzędną wskazującą na zatwierdzenie przed scaleniem, tak że mógłbym powierz mu to ponownie, a następnie ponownie scal. To, co wydaje się niezręczne w tym przepływie pracy, polega na tym, że musiałbym z góry zdecydować o wszystkim, co robię, do której gałęzi należał, pracować nad tym, co wydawało się zakończeniem, a następnie zatwierdzić i scalić przed testowaniem. Jedną z rzeczy, które naprawdę lubię w Git, jest to, jak łatwo jest zrobić wszystko, czego potrzebujesz, aby aplikacja działała, a następnie zdecydować później, jak i gdzie zatwierdzić zmiany. O ile mi wiadomo, jeśli jesteś obecnie w oddziale i masz trochę pracy, tam jest ”

Czy to, co robię, jest rozsądnym procesem dla długoterminowych składek? Czy ktoś może polecić inny przepływ pracy, który może być lepszy i dlaczego jest lepszy?

Mason
źródło
1
Możesz dość łatwo przesłać trochę pracy do innego oddziału - używając rebase git-scm.com/book/en/Git-Branching-Rebasing . Tak długo, jak najpierw zatwierdzasz, możesz następnie dokonać zmiany bazy na inną gałąź, a następnie zresetować bieżącą gałąź, aby usunąć zatwierdzenie.
artbristol,

Odpowiedzi:

2

Oto strategia, która może Ci pomóc:

Utwórz 2 prywatne repozytoria git, z których jedno jest repozytorium do pracy w firmie, a drugie to repozytorium ogólne (chciałbym je zatwierdzić).

Aby ten system działał, musisz to zrobić (co uważam za najważniejszą strategię): Zdefiniuj, co jest „ogólne” i może być używane przez wszystkich innych członków społeczności

Posługując się tą definicją, możesz rozdzielić, co będziesz zobowiązać się z powrotem i czego nie musisz robić.

Ma to sens, że to, co kodujesz dla społeczności, ma formę ogólną, ponieważ zbyt konkretny fragment kodu nie przyniesie korzyści nikomu (a może nawet nie dotrze do gałęzi master).

Teraz, gdy wiesz, co zamierzasz przekazać społeczności, możesz wykonać większość „oddawania” w dedykowanym repozytorium. Następnie po prostu rozwidlasz repozytorium do repozytorium opartego na pracy i wykonujesz na nim wszelkie prace związane z pracą.

Podejrzewam, że spędzicie dużo więcej czasu w repozytorium „oddawania”, więc pamiętajcie tylko o dostarczeniu cennych komentarzy itp. (Może nawet dokumentacji) osobom, które będą korzystać z tego projektu w przyszłości.

Wierzę również, że git może zrobić znacznie więcej niż myślisz. Obejrzałem ten film na Vimeo: http://vimeo.com/46010208, a ona wykonała świetną robotę, wyjaśniając wiele zwariowanych rzeczy, które może zrobić git.

Moja strategia nie jest jedyną dostępną na rynku, ale z pewnością może być punktem wyjścia, aby pomyśleć o 1, który najbardziej ci odpowiada.

Joe
źródło
1

W zależności od charakteru bazy kodu typu open source i tego, co musisz osiągnąć, wprowadzając zmiany, możesz uzyskać wiele kilometrów, oddzielając swoje obawy. W rozwidleniu projektu dodaj tylko rzeczy, które zamierzasz wnieść z powrotem do oryginału. Dodaj zaczepy lub punkty rozszerzeń, aby umożliwić wykonywanie pracy w firmie, która nie zostanie udostępniona.

W ten sposób nigdy nie będziesz musiał się martwić, że podzielisz się z wyprzedzeniem lub zdecydujesz, co udostępnić, a czego nie. Ponieważ dodałeś elastyczność do oryginalnego projektu, zawsze możesz później udostępnić niektóre części swojej pracy w firmie.

Allan
źródło