Czy duże magazyny rtęci cierpią z powodu „wyścigu wypychającego”?

9

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ę

  1. Użytkownik próbuje pchać
  2. Nieaktualne (mercurial nie pozwoli Ci wypchnąć, jeśli Twoje lokalne repozytorium jest nieaktualne), więc wyciągasz i scalasz lokalne zmiany
  3. Użytkownik próbuje powtórzyć, ale podczas łączenia ktoś naciskał, więc znów są nieaktualne
  4. Pociągnij i połącz ponownie
  5. Wciąż nieaktualne
  6. 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ń?

TheLQ
źródło
kto nie rozgałęzia się w rtęci? hg branch myfeature; hg ci -m "Starting feature branch"; hg push --new-branch
Carson Myers
@Carson W Git oddziały są tanie. W rtęci są znacznie bardziej trwałe. Ogólnie słyszałem, że w git rozgałęziasz się do pracy nad funkcją, w mercurial tworzysz nową głowę lub klonujesz do innego katalogu.
TheLQ
cóż, możesz dodać --close-branchpodczas zatwierdzania - a mercurial nazwał gałęzie, nie musisz klonować do nowego katalogu
Carson Myers
@Carson Nie mówię, że nie możesz lub że to niemożliwe, po prostu mówię, że zawsze słyszałem, że konwencja polega na klonowaniu lub tworzeniu nowej głowy, a nie gałęzi. Większość repozytoriów rtęciowych, które widziałem, ma tylko kilka oddziałów, podczas gdy
repozytorium
Nie jestem pewien, nigdy nie korzystałem z git
Carson Myers,

Odpowiedzi:

8

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.

Ed James
źródło
Zawsze słyszałem, że klonujesz do pracy nad funkcjami eksperymentalnymi, a nie gałęziami. Większość powodów, o których słyszałem, to fakt, że w oddziałach rtęciowych są one znacznie bardziej trwałe niż w Git. Mogę się jednak mylić
TheLQ
To jest to, że jeśli chodzi o rtęć, klon jest gałęzią, nadal możesz zrobić prawie wszystko, co możesz zrobić ze standardową „głową” (i kilkoma innymi rzeczami!), Ale masz dodatkowy luksus przyciągania / pchnij poziom odległości od tułowia. Nie jestem pewien, co masz na myśli mówiąc o trwałości, kiedy skończysz ze swoim klonem, możesz go po prostu usunąć.
Ed James,
Jak to możliwe, że nie ma pośpiechu o 17:00?
Cem Catikkas,
Tak jak powiedziałem, przez większość czasu wszyscy pracują nad własnym oddziałem (jest mało prawdopodobne, aby pracowali nad tym samym zagadnieniem co inna osoba), więc podczas gdy wszyscy pchają pod koniec dnia, to do różnych gałęzi. Dodatkowo w mojej pracy mamy elastyczny czas, więc jest to raczej pośpiech w godzinach 16–18;)
Ed James
1

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.

Rein Henrichs
źródło
OP dokonuje tutaj rozróżnienia na temat git i hg, ale twoja odpowiedź jest skierowana do git (pierwszy link jest na przykład bardzo zorientowany na git). To poprawna odpowiedź (ponieważ pierwotna błędna interpretacja rozgałęzienia w hg OP prowadzi do samego pytania), ale warto zauważyć, że jest tak samo w przypadku hg.
Ed James,
@Ed Dobry punkt, zaktualizowano w celu wyjaśnienia, że ​​odpowiedź dotyczy zarówno git, jak i rtęci.
Rein Henrichs
zobacz repozytorium git.git, jest to dobry przykład łączenia za pomocą DVCS. Istnieje wiele punktów scalania. Jednocześnie może istnieć więcej niż 10 oddziałów tymczasowych, zanim ostatecznie zostaną połączone z oddziałem głównym.
linquize