Czytając kilka odpowiedzi „Dlaczego DVCS jest lepszy” na kilka pytań na Programmers.SE wszyscy wydają się twierdzić, że ogólnie rzecz biorąc, DVCS jest lepszy, ponieważ nie masz wyścigu zatwierdzania w dużych projektach, IE commit, nieaktualny, więc aktualizuj, zatwierdzaj, ponownie nieaktualny, zatwierdzaj, nadal nieaktualny itp.
DVCS ogranicza to dzięki koncepcji push. Czy jednak w bardzo dużych projektach nie byłoby „wyścigu wypychającego”, szczególnie pod koniec dnia? Wiem, że w Git można temu zaradzić poprzez ciągłe rozgałęzianie wszystkiego, ale w Mercurial nie rozgałęziasz się, tworzysz nową głowę.
Problem, który widzę
- Użytkownik próbuje pchać
- Nieaktualne (mercurial nie pozwoli Ci wypchnąć, jeśli Twoje lokalne repozytorium jest nieaktualne), więc wyciągasz i scalasz lokalne zmiany
- Użytkownik próbuje powtórzyć, ale podczas łączenia ktoś naciskał, więc znów są nieaktualne
- Pociągnij i połącz ponownie
- Wciąż nieaktualne
- Powtarzać
Brzmi znajomo?
Czy to rzeczywisty problem z bardzo dużymi i popularnymi repozytoriami rtęci? Co powiesz na to w firmie, kiedy wszyscy podejmą ostatni dzień?
hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
--close-branch
podczas zatwierdzania - a mercurial nazwał gałęzie, nie musisz klonować do nowego kataloguOdpowiedzi:
O ile mi wiadomo, większość dużych projektów open source korzystających z DVCS używa „żądań ściągania” zamiast wypychań, tj. Użytkownik żąda, aby projekt pobierał z ich gałęzi, a prject może podjąć takie żądania ściągania w dowolnej kolejności , Jeśli w ogóle. Eliminuje to potrzebę „wyścigu pchającego”, jak go nazwałeś.
W innych firmach nie mogę poręczyć za proces, ale w mojej pracy nie stanowi to problemu.
Zobacz, gdy pracujesz nad sprawą, pracujesz nad gałęzią całego repozytorium, więc Twoje żądania wypychania trafiają do zdalnej wersji głównego pnia. Kiedy chcesz zintegrować (zakończoną) zmianę w bagażniku, ładujesz bagażnik, ciągniesz, scalasz, popychasz.
Czasami ( bardzo sporadycznie) dwie osoby spróbują to zrobić w tym samym czasie (zwykle z powodu złej komunikacji). W takim przypadku ktokolwiek „przegra” będzie musiał ponownie pociągnąć, połączyć, pchnąć. Ponieważ nie ma pośpiechu o godzinie 17, aby zatwierdzić do centralnego repozytorium, opisany problem tak naprawdę nie istnieje.
Takie jest piękno DVCS: rozgałęzianie jest bezbolesne, więc każdy może pracować nad własnym oddziałem.
EDYTOWAĆ
Och, właśnie zauważyłem twój komentarz „W mercurialie nie rozgałęziasz się ...”: Tak, robisz. Nie musisz tego robić, ale ponieważ jest to tak łatwe, a korzyści z tego wynikające przeważają nad tym, że nie robią tego zbyt wiele, często zdarza się, że po prostu dużo repo.
źródło
Nie, nie ma wyścigu wypychania, ponieważ praca jest wykonywana w gałęziach tematycznych . Mistrz scalania zarządza (stosunkowo niższą) złożonością łączenia gałęzi w gałąź integracji . Zwykle odbywa się to w sposób ciągły. Aby uzyskać więcej informacji na temat przepływów pracy rozproszonych kontroli wersji, pierwsze źródło byłoby usta konia:
man gitworkflows
, on-line tutaj . Mercurial przepływy zrobić użytku rozgałęzienia mimo roszczenia i techniki są podobne.źródło