Myślę, że ten artykuł, Udany model rozgałęziania gitów , jest bardzo dobrze znany wśród doświadczonych użytkowników DVCS.
Używam hg
głównie, ale uważam, że ta dyskusja jest odpowiednia dla każdego DVCS.
Nasz obecny obieg pracy polega na tym, że każdy programista klonuje główne repozytorium. Piszemy kod na naszym lokalnym repozytorium, przeprowadzamy testy, a jeśli wszystko pójdzie dobrze, wypychamy do mastera.
Chcemy więc skonfigurować serwery CI, takie jak Jenkins, i ulepszyć nasz przepływ pracy z przyszłym systemem udostępniania (szef kuchni, lalek, ansible itp.).
Prawdziwa część
Cóż, powyższy model działa dobrze, ale gałęzie mogą złamać CI. Gałąź funkcji powinna zsynchronizować się z początkiem (zgodnie z artykułem byłoby to development
gałąź), aby CI i scalanie były płynne, prawda?
Powiedzmy, że Alice i Bob pracują nad dwiema funkcjami. Ale Alice jest skończona następnego dnia. Funkcja Boba trwa tydzień. Do czasu, gdy Bob jest skończony, jego zmiany są przestarzałe (być może Alice zmieniła / zmieniła nazwy niektórych klas).
Jedno rozwiązanie polega na tym, że programiści muszą codziennie master/origin
sprawdzać, czy są jakieś zmiany. Jeśli Alice się zaangażuje, Bob powinien pociągnąć i połączyć się ze swoim obszarem roboczym, aby jego gałąź funkcji była aktualna.
- Czy to dobry sposób?
- Czy te gałęzie powinny istnieć w głównym repozytorium (nie lokalnym klonie?) Czy to znaczy, że każdy programista powinien mieć uprawnienia do głównego repozytorium na GitHub / Bitbucket, aby móc utworzyć nowy oddział? Czy odbywa się to lokalnie?
- Wreszcie model przedstawiony w artykule powinien przerwać CI, jeśli gałęzie nie są zsynchronizowane z
origin/master
. Skoro chcemy tworzyć kompilację nocną, czy programiści powinni pobierać i scalać przed wyjściem z pracy, a także uruchamiać CI w każdej gałęzi funkcji?