Czy współpracownicy w prywatnym repozytorium Github powinni rozwidlać repozytorium?

15

Obecnie pracuję nad projektem i mamy kod źródłowy w prywatnym repozytorium na Githubie, z każdym z nas jako współpracownikiem.

Nie jest jasne, jak oddzielić każdą naszą pracę.

Myślę, że powinniśmy zrobić:

  1. Każdy z nas musi rozwidlić repozytorium
  2. Kiedy jesteśmy gotowi przekazać nasz kod, przesyłamy żądanie ściągnięcia do repozytorium lidera projektu, który może jednocześnie wykorzystać to jako okazję do przeglądu kodu

Jeśli chodzi o prywatne repozytoria, czy do tego należy używać rozwidlenia, czy też nadmiernie komplikuję sytuację?

JMK
źródło
1
Tak. Zrób to tak, jak tutaj zasugerowałeś, stwórz zespół i spraw, aby repozytorium drużyny było repozytorium „master”. Wszyscy robią PR, w tym lider projektu.
RubberDuck

Odpowiedzi:

7

Klonowanie repozytorium na lokalnej maszynie programisty jest już rodzajem forku. Jeśli każdy programista rozwiąże problem z repozytorium na GitHub, służy to tylko do opublikowania jego aktualnego stanu pracy.

Może to być odpowiednie, gdy istnieje centralne repozytorium główne i wielu autorów, którym nie ufa bezpośredni dostęp do tego repozytorium. Działa to doskonale w przypadku projektów typu open source, w których każdy może przyczynić się i wysłać żądanie ściągnięcia, które jest następnie sprawdzane i łączone przez grupę głównych opiekunów. Korzystanie z wielu repozytoriów wymusza przepływ pracy oparty na żądaniach pull.

W małym, zaufanym zespole nie jest to konieczne. Aby zapobiec wzajemnemu kontaktowaniu się różnych osób, można zastosować strategię taką jak Git Flow: Każda mała funkcja jest implementowana w osobnej gałęzi funkcji. Po zakończeniu funkcji jest ona scalana z gałęzią master. Większość zespołów połączy to z żądaniem ściągnięcia lub przeglądem kodu zgodnie z konwencją, ale są na tyle zaufane, że w razie potrzeby pominą to. Podczas gdy oddzielne repozytoria doprowadziłyby do opublikowania przez deweloperów ich obecnego stanu na rozwidlonych, ale widocznych dla zespołu repozytoriach, w jednym wspólnym repozytorium przesunęłyby swoje zmiany do oddzielnej gałęzi funkcji. W większości przepływów pracy odradza się wszelkie prace programistyczne na master / trunk.

Różnica polega wyłącznie na zarządzaniu dostępem, a nie na implementowanym przepływie pracy. W obu konfiguracjach można wykonywać przepływy pracy oparte na żądaniach ściągania. Z surowego punktu widzenia Git nie ma dużej różnicy między rozwidleniem a odgałęzieniem - każde z nich zasadniczo dzieli historię projektu i pozwala na dodawanie zmian bez wpływu na inne gałęzie / widelce. Biorąc to pod uwagę, znacznie lepiej byłoby udostępnić jedno repozytorium w zaufanej, zamkniętej grupie.

amon
źródło
1
Aby szybko powtórzyć to, co mówi @amon, pracowałem w organizacji, w której każdy programista musiał przejść od głównego repozytorium, co według nas było tylko niepotrzebnym i niezdarnym dodatkowym krokiem. Nigdy nie rozumiałem, dlaczego było to wymagane, ale nasz zespół operacyjny nie chciał o tym dyskutować. Proces polegał na: zatwierdzeniu -> wypchnięciu -> pociągnięciu prośby -> czekaniu -> czekaniu - - próbie zwrócenia uwagi zespołu operacyjnego na IRC -> podejściu do facetów ops i poproszeniu ich, aby spojrzeli na żądanie ściągnięcia -> czekaj -> kod zintegrowany -> powtórz.
DaveyDaveDave
1
Naprawdę odradzam ten przepływ pracy. Doświadczyłem naprawdę złych konfliktów scalania z dwoma programistami, którzy naciskali bezpośrednio na kanoniczne repozytorium. Nie wspominając o tym, że najlepiej jest, aby ktoś inny sprawdził Twój kod. O wiele łatwiej jest przesyłać żądania ściągania, jeśli każdy ma rozwidlenie, a istnieje jedno kanoniczne repozytorium projektu. Tak tak. Wiem, że to nie jest „rozpowszechniane”. Cokolwiek. Model Fork & PR działa lepiej z mojego doświadczenia.
RubberDuck,
@ RubberDuck, co jest dobrym punktem, podejrzewam, że mój przypadek był rzadki, ponieważ osoby odpowiedzialne za żądania ściągania nie były w stanie przejrzeć kodu, co sprawiło, że nie miał on sensu. Sugeruję inne dedykowane narzędzia do przeglądania kodu, takie jak gerrit, mogą być bardziej skuteczne, ale uważam, że rozwidlenie może (powinno) działać podobnie.
DaveyDaveDave
Problem polega na tym, kto decyduje, kiedy funkcja jest gotowa do przejścia w tryb główny? Uważam też, że praca z gałęziami jest nieprzyjemna; Setki oddziałów na jednym repozytorium i większość z nich jest nie połączona lub w połowie wykonana, dlaczego w ogóle miałyby istnieć, jeśli nawet nie są gotowe do połączenia? Zarządzanie dostępem w 100% dotyczy przepływu pracy, ta odpowiedź jest w połowie dobra.
Rudolf Olah,
5

To zadziałałoby lub możesz użyć metody rozgałęziania, w której każdy contrib ma swoją własną gałąź (gałęzie), które, jeśli zespół wyrazi zgodę, zostaną połączone z master.

Margeaux Spring
źródło
Dzięki, pójdę z inną odpowiedzią, ponieważ ma więcej szczegółów, ale tak, zgadzam się :)
JMK