Czy podczas korzystania z Git wskazane jest używanie gałęzi master do aktywnego programowania?

32

Po pierwsze, przechodzimy do przejścia wszystkich naszych zespołów projektowych do korzystania z git i opracowujemy wytyczne dotyczące sposobu organizacji repozytoriów, tak aby niektóre oddziały mogły być monitorowane pod kątem ciągłej integracji i automatyczne wdrożenie na serwerach testowych. Obecnie rozwijane są dwa modele:

  1. Duży wpływ na artykuł nvie.com na temat udanego rozgałęzienia z odgałęzieniem głównym reprezentującym najbardziej stabilny kod, gałęzią programistyczną dla najnowocześniejszego kodu oraz gałęzią integracji dla kodu gotową do testowania w ramach kontroli jakości.

  2. Alternatywny model, w którym gałąź główna reprezentuje najnowszy kod rozwoju, gałąź integracji dla kodu gotowego do testowania w ramach kontroli jakości oraz gałąź produkcji dla kodu stabilnego, który jest gotowy do wdrożenia.

W tym momencie jest to częściowo kwestia semantyki w odniesieniu do tego, co reprezentuje gałąź master, ale czy aktywny rozwój w gałęzi master jest w rzeczywistości dobrą praktyką, czy to naprawdę nie jest tak istotne?

rjzii
źródło
1
Podoba mi się sposób, w jaki Scott Chacon używa GitHub: scottchacon.com/2011/08/31/github-flow.html
user16764
1
Jak opisano, wydaje mi się, że jest to raczej problem semantyczny niż żaden - każda organizacja będzie rozwijać własne procesy i pod pewnymi względami nazwy muszą odzwierciedlać przebieg pracy. Generalnie kluczem wydaje się być to, że gdzieś definiujesz coś takiego, że „kod źródłowy HEAD zawsze odzwierciedla stan gotowości do produkcji”. To, co zdecydujesz się nazwać, jest mniej ważne, ale zarówno git-flow, jak i przepływ pracy GitHub koncentrują się na tej separacji i kontrolowaniu, gdy przejdziesz do gotowej do produkcji „rzeczy”
Murph
@Murph - To prawda, ale ponieważ robimy to trochę od zera, pomyślałem, że najlepiej będzie mniej lub bardziej przestrzegać wspólnych konwencji, aby zatrudnieni nowi programiści nie mieli krzywej uczenia się z powodu nietypowych praktyk wewnętrznych.
rjzii
Potem odpowiedziałeś na swoje pytanie (-: Szczerze mówiąc, zadając pytanie, jesteś daleko przed zakrętem ...
Murph

Odpowiedzi:

33

Jedyną prawdziwą cechą definiującą mastergałąź jest to, że jest domyślna dla niektórych operacji. Ponadto nazwy oddziałów mają znaczenie tylko w określonym repozytorium. Mogę na masterprzykład wskazać na twoją development. Ponadto mastergałąź nie jest nawet wymagana, więc jeśli istnieje jakieś zamieszanie co do tego, która gałąź powinna być, radzę zwykle całkowicie ją pominąć.

Jednak moim zdaniem najlepszym sposobem, aby to sobie wyobrazić, jest domyślna opcja wypychania. Zakłada się, że większość samouczków online, które przeczytali programiści. Dlatego sensowne jest posiadanie mastergałęzi, do której najczęściej jest popychany. Niektórzy uważają go za nieskazitelną kopię, która jest nietykalna dla programistów, chyba że po ścisłej kontroli, ale użycie jej w ten sposób usuwa wiele przydatnych domyślnych ustawień git. Jeśli chcesz mieć taki nieskazitelny oddział, umieściłbym go w całkowicie oddzielnym repozytorium, do którego tylko niektóre osoby mogą pisać.

Karl Bielefeldt
źródło
7
+1. A ponieważ kod „gotowy do produkcji” jest ważnym kodem, powinien również znajdować się w gałęzi o nazwie podkreślającej to znaczenie. „master” jako domyślna nazwa oddziału z pewnością nie spełnia tego żądania, ponieważ jest również używana w każdym innym repozytorium niezależnie od intencji.
Bananeweizen
4
+1. To jest prawdziwa odpowiedź. Aby podkreślić tę kwestię: nikt z twojego zespołu nie zdefiniował gałęzi „master”, tak zrobił system git. Jeśli chodzi o coś ważnego, trzymaj się gałęzi, które zdefiniował ktoś z twojego zespołu.
Travis Wilson
1
W pełni zgadzam się. Chociaż bardzo podoba mi się model git flow ( nvie.com/posts/a-successful-git-branching-model ), jedyną rzeczą, która mnie niepokoi, jest to, że master jest ściśle zarezerwowany dla wydań, co jest sprzeczne z intuicją.
Bachi,
12

Nie, nie jest wskazane, nawet na początku, zanim pójdziesz do kontroli jakości. Zgodnie z najlepszą praktyką wzór rozwoju powinien być spójny od początku do końca. Twoja gałąź główna powinna zaczynać się pusta, należy gałąź gałąź programistyczna rozpocząć i dodawać pliki, łączyć się z gałęzią integracji, a następnie z mistrzem.

Podczas gdy nikt nie może przejmować się podczas rozwoju tym, że gałąź master nie buduje, wcześnie wpada w złe nawyki. Mistrz powinien zawsze budować, a dla głównych wydań funkcji nie byłoby złym pomysłem zarchiwizowanie gałęzi głównych kompilacji, aby w razie potrzeby można było przywrócić stabilne punkty wydania.

Joel Etherton
źródło
3
Czy nie lepiej jest śledzić wersje za pomocą tagów?
Adonis K. Kakoulidis,
1
@AdonisK .: Nie widzę znaczenia twojego pytania.
Joel Etherton,