Cytat(Zyx @ 21.01.2011, 23:10:13 )

Wiadomo, w tym systemie kontroli wersji nacisk kładziony jest na tworzenie gigantycznej liczby gałęzi i ich scalanie. Gdy wiosną przerzuciłem się na Gita, wszystko było fajnie, z wyjątkiem tego, że nie miałem żadnego doświadczenia w tym, jak organizować te gałęzie, by się w nich nie pogubić.
Ja pracuje w ten sposób:
Jeżeli widzę ralną potrzebę tworzenia nowego brancha to go tworzę. Kiedy ta potrzeba znika to znika też sam branch ponieważ go usuwam. Uprzednio wmergowując zmiany do lokalnego master jeżeli jestem zadowolony z tego co zrobiłem lub po prostu je porzucam. Wszystko to lokalnie. Kiedy jestem pewien ze mój master jest w miarę stabilny pushuje go do origin. Ten push jest momentem w ktorym staram sie przetestowac zmiany tak aby nie upublicznic bledow. Jezeli master osiaga punkt, który jest jakas stabilna lub koncowa wersje produktu to oznaczam to np. nadajac mu taga. I tyle, to wystarczy nawet na sporych rozmiarow projekt.
Jezeli jest tak ze chce sie podzielic kotryms z moich lokalnych branchy developerskich powiedzmy "branchX" bo np. potrzebuje aby jakis programista mi w czyms pomogl to upubliczniam (push) go na swoim zdalnym serwerze git ale nie pod doemna origin projektu! Gosc sciaga (pull) moj kod robi w nim zniamy i wystawia go (push) na wlasnym zdalnym serwerze (znowu nie na serwerze projektu). Taka wymiana moze isc wiele razy. Kiedy skonczymy to wmergowuje jego ostatnie zmiany (pull) w swoje lokalny branchX. i dalej leci ja wyzej czyli z lokalnego branchX do lokalnego master, lokalny master push do master na origin i wywalam lokalny branchX jako niepotrzebne.
Nie ma takiej opcji aby pogubić się w branchach poniewaz one nie istnieją "wszystkie na raz" a pojawiaja sie i ZNIKAJĄ wmiare potrzeby i nie jest ich wiele. Opis do ktorego link podales moim zdaniem NIE jest dobry choć graficznie bardzo mi się podoba

. Przedstawiona tam koncepcja moze byc uzyteczna ale bradziej pasuje do SVN i innych systemów nierozproszonych skąd zreszta została wzięta. W tych systemach tworzenie branchy develop i master (trunk) ma sens z wielu powodow. W SVN każdy commit równa się upublicznieniem zmian tak więc jeżeli czesto komitujesz (a to dobra praktyka) to robiac to bezposrednio do trunk mozesz latwo wyprowadzic go ze stabilnosci przez co inni uczestnicy projektu zamiast pracowac potykaja sie o twoje błedy.
W GIT nie ma takiego problemu komity ida tylko na twoj lokalny host. Mozna powiedzic ze gitowy lokalny master jest tym czym SVNowy branch dev. Wiec nie ma realnej potrzeby brancha dev na serwerze origin. W praktyce w projektach na GIT branch dev istnieje tylko z uwagi na programistów którzy nie potrafią przestawić starych nawyków i łatwiej jest zrobić im ten brach niż się z nimi użerać...