Nasza firma obecnie używa prostego modelu rozgałęziania magistrali / wydania / poprawek i chciałaby uzyskać porady na temat tego, które modele rozgałęziania najlepiej sprawdzają się w Twojej firmie lub w procesie rozwoju.
Przepływy pracy / modele rozgałęziające
Poniżej znajdują się trzy główne opisy tego, które widziałem, ale są one częściowo sprzeczne ze sobą lub nie idą wystarczająco daleko, aby rozwiązać kolejne problemy, na które natrafiliśmy (jak opisano poniżej). Dlatego nasz zespół do tej pory domyślał się nie tak świetnych rozwiązań. Robisz coś lepszego?
Scalanie vs rebasing (historia splątana vs sekwencyjna)
Czy powinienem
pull --rebase
albo poczekać z połączeniem z powrotem do głównej linii, aż twoje zadanie zostanie zakończone? Osobiście skłaniam się ku scaleniu, ponieważ zachowuje to wizualną ilustrację, na podstawie której zadanie zostało uruchomione i zakończone, a nawet wolęmerge --no-ff
do tego celu. Ma jednak inne wady. Również wielu nie zdawało sobie sprawy z użytecznej właściwości scalania - że nie jest on przemienny (scalenie gałęzi tematycznej w master nie oznacza scalenia master do gałęzi tematycznej).Szukam naturalnego przepływu pracy
Czasami zdarzają się błędy, ponieważ nasze procedury nie wychwytują konkretnej sytuacji za pomocą prostych zasad. Na przykład poprawka potrzebna do wcześniejszych wydań powinna oczywiście opierać się na poziomie niższego szczebla, aby umożliwić połączenie go ze wszystkimi gałęziami (czy użycie tych terminów jest wystarczająco jasne?). Jednak zdarza się, że poprawka przenosi się do wzorca, zanim deweloper zda sobie sprawę, że powinna była zostać umieszczona dalej niżej, a jeśli jest już wypchnięta (jeszcze gorzej, scalona lub coś na jej podstawie), wówczas pozostała opcja to wybranie wiśni, z związane z tym niebezpieczeństwa. Jakich prostych zasad używasz?Uwzględniono także niezręczność jednej gałęzi tematycznej, koniecznie wykluczając inne gałęzie tematyczne (zakładając, że są one rozgałęzione od wspólnej linii bazowej). Deweloperzy nie chcą kończyć funkcji, aby rozpocząć kolejną, mając wrażenie, że napisanego właśnie kodu już nie ma
Jak uniknąć tworzenia konfliktów scalania (ze względu na cherry-pick)?
Co wydaje się pewnym sposobem na utworzenie konfliktu scalania jest wybranie między oddziałami, aby nigdy więcej nie mogły zostać połączone? Czy zastosowanie tego samego zatwierdzenia podczas przywracania (jak to zrobić?) W którejkolwiek gałęzi mogłoby rozwiązać tę sytuację? To jeden z powodów, dla których nie odważę się naciskać na przepływ pracy w dużej mierze oparty na scalaniu.
Jak rozłożyć na aktualne gałęzie?
Zdajemy sobie sprawę, że składanie zakończonej integracji z gałęzi tematów byłoby niesamowite, ale często praca naszych programistów nie jest jasno zdefiniowana (czasami tak prosta, jak „grzebanie się”), a jeśli jakiś kod już przeszedł do tematu „misc”, zgodnie z powyższym pytaniem nie można go stamtąd wyciągnąć. Jak pracujesz z definiowaniem / zatwierdzaniem / ukończeniem / wydaniem gałęzi tematycznych?
Właściwe procedury, takie jak przegląd kodu i stopniowanie, byłyby oczywiście cudowne.
Ale po prostu nie możemy utrzymać rzeczy na tyle nierozpoznanych, by sobie z tym poradzić - jakieś sugestie? gałęzie integracji, ilustracje?
Poniżej znajduje się lista powiązanych pytań:
- Jakie są dobre strategie pozwalające na wdrożenie poprawionych aplikacji?
- Opis przepływu pracy dla użycia Git do tworzenia własnego oprogramowania
- Przepływ pracy Git dla korporacyjnego rozwoju jądra Linux
- Jak utrzymujesz kod programistyczny i kod produkcyjny? (dzięki za ten plik PDF!)
- git releases management
- Git Cherry-pick vs Merge Workflow
- Jak wybrać wiele zatwierdzeń
- Jak łączyć wybrane pliki z git-merge?
- Jak wiśnia wybrać zakres zobowiązań i połączyć się w inną gałąź
- ReinH Git Workflow
- przepływ pracy git do wprowadzania modyfikacji, których nigdy nie zepchniesz do źródła
- Wybierz połączenie
- Prawidłowy przepływ pracy Git dla połączonego systemu operacyjnego i prywatnego?
- Utrzymanie projektu za pomocą Git
- Dlaczego nie mogę Git scalić zmian pliku ze zmodyfikowanym rodzicem / master.
- Git rozgałęzianie / zmiany zasad dobrych praktyk
- Kiedy „git pull --rebase” wpędzi mnie w kłopoty?
- Jak DVCS jest używany w dużych zespołach?
Sprawdź także, co pisze Plastic SCM na temat rozwoju opartego na zadaniach , a jeśli Plastic nie jest twoim wyborem, zapoznaj się z modelem rozgałęziającym nvie i jego skryptami pomocniczymi .