Starałem się zrozumieć, jak rozgałęzienie jest korzystne. Nie mogę przeprowadzić repozytorium z 2 głowami lub 2 oddziałami ... dlaczego więc miałbym ich potrzebować/używać?Pomóż zrozumieć zalety rozgałęzienia w Mercurial
Odpowiedz
Przede wszystkim możesz naciskać nawet dwoma głowami, ale ponieważ prawdopodobnie nie chcesz tego robić, domyślnym zachowaniem jest zapobieganie temu. Możesz jednak zmusić push, aby przejść.
Teraz, jeśli chodzi o rozgałęzianie, zróbmy prosty scenariusz w niezespolonym systemie kontroli wersji, takim jak Subversion.
Załóżmy, że masz kolegę, który pracuje w tym samym projekcie co ty. Obecny najnowszy zestaw zmian w repozytorium Subversion to wersja 100, zarówno aktualizuje się do tego lokalnie, tak, że teraz oboje macie te same pliki.
Ok, teraz twój kolega już pracował nad jego zmianami od kilku godzin, a więc popełnia. Spowoduje to przeniesienie centralnego repozytorium do wersji 101. Wciąż jesteś na wersji 100 lokalnie i wciąż pracujesz nad swoimi zmianami.
W pewnym momencie kończysz, a chcesz zatwierdzić, ale Subversion ci nie pozwoli. Mówi, że musisz najpierw zaktualizować, aby rozpocząć proces aktualizacji.
Proces aktualizacji chce wprowadzić zmiany i udawać, że zacząłeś od wersji 101 zamiast 100. Jeśli twoje zmiany nie są sprzeczne z tym, co zostało zrobione przez twojego kolegę, wszystko jest w porządku, ale jeśli twoje zmiany to są w konflikcie, masz problem.
Teraz musisz scalić swoje zmiany ze zmianami, a wszystko może pójść na marne. Na przykład możesz zakończyć scalanie jednego pliku OK, drugi plik OK, lub tak myślisz, a następnie trzeci plik, i nagle odkryjesz, że masz trochę błędnych danych, byłoby lepiej scalić drugi plik inaczej.
O ile nie wykonałeś kopii zapasowej zmian przed aktualizacją, a wcześniej czy później zapomnisz, masz problem.
Obecnie powyższy scenariusz jest dość powszechny. Cóż, być może nie część łącząca, to zależy od tego, ile osób pracuje w tym samym obszarze lub plików w tym samym czasie, ale część "musi zaktualizować przed popełnieniem" jest dość powszechna w przypadku Subversion.
Jak działa Mercurial?
Cóż, Mercurial zobowiązuje się lokalnie, nie komunikuje się z żadnym repozytorium, więc nie powstrzyma cię od popełnienia.
Spróbujmy więc powtórzyć powyższy scenariusz, właśnie tym razem w Mercurial.
changeset tipmost w zdalnym repozytorium jest rewizja 100. Oboje są klonowane to w dół, a ty zarówno rozpoczęciem pracy na zmiany, od rewizji 100.
Twój kolega kończy swoje zmiany i zobowiązuje, lokalnie. Następnie przesuwa swój zestaw zmian do centralnego repozytorium, przenosząc końcówkę do wersji 101.
Następnie wypełniasz zmiany i zatwierdzasz, również lokalnie, a następnie chcesz nacisnąć, ale pojawi się komunikat o błędzie już odkrył i pyta.
Jak to się zmienia?
Cóż, twoje zmiany są teraz zatwierdzone, nie ma sposobu, chyba że spróbuj naprawdę ciężko przypadkowo je zgubić lub zniszczyć.
Oto 3 repozytoriów w zabawach i ich aktualny stan:
Colleague ---98---99---100---A
Central ---98---99---100---A
You ---98---99---100---B
Jeśli było wcisnąć i pozwolono, aby to zrobić (lub zmusić przeforsować), centralnym repozytorium będzie wyglądać następująco:
Central ---98---99---100---A
\
+--B
Dwie głowy. Jeśli twój kolega wyciągnął teraz, z którym powinien kontynuować pracę? To pytanie jest powodem, dla którego Mercurial domyślnie uniemożliwi ci to.
Więc zamiast ciągnąć, otrzymasz powyższy stan w swoje własne repozytorium.
Innymi słowy, możesz wybrać wpływ na własne repozytorium i utworzyć tam wiele głowic, ale nie musisz narzucać tego problemu nikomu innemu,.
Następnie łączysz, ten sam typ operacji, który musiałeś wykonać w Subversion, z tym wyjątkiem, że twój zestaw zmian jest bezpieczny, został popełniony, a ty przypadkiem nie uszkodzisz go ani nie zniszczysz. Jeśli, w połowie scalania, chcesz zacząć od nowa, możesz, nic nie stracić, nie zaszkodzić.
Po scaleniu, lokalnym repozytorium wygląda następująco:
You ---98---99---100---A----M
\ /
+--B--+
To jest teraz bezpieczny do pchania, a jeśli twój kolega teraz ciągnie, wie, że musi kontynuować z changeset m, jeden która połączyła jego i twoje zmiany.
Powyższy opis dotyczy sytuacji rozproszonych Mercurials.
Można również nazwać gałęzie, aby stały się bardziej trwałe. Na przykład, możesz chcieć nazwać gałąź "stabilną", aby zasygnalizować, że wszelkie zmiany w tej gałęzi zostały dokładnie przetestowane i są bezpieczne do wydania klientom lub do wdrożenia. Następnie scalilibyście zmiany w tej gałęzi dopiero po zakończeniu tych testów.
Natura jest jednak taka sama, jak powyższy opis. Ilekroć więcej niż jedna osoba pracuje nad projektem z Mercurial, uzyska dostawać gałęzie, i to dobrze.
Za każdym razem, gdy dokonywany jest więcej niż jeden klon repo i dokonywane są zatwierdzenia w tych klonach, rozgrywają się rozgałęzienia, niezależnie od tego, czy je nazwiesz, używając polecenia hg branch
, czy też nie. Moja filozofia jest taka, że równie dobrze możesz im nadać imię. To sprawia, że rzeczy stają się mniej zagmatwane.
dobre wyjaśnienie rtęci branżach: http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/
Przeczytałem niektóre z tego przewodnika, nadal nie rozumiem, dlaczego kiedykolwiek zrobiłeś oddział, a nie tylko kopiowanie repo ... – Webnet
Posiadanie nazwanych gałęzi w tym samym repozytorium sprawia, że są bardziej ze sobą powiązane niż posiadanie wielu klony. Być może chcesz, aby Twój zespół zawsze miał dostęp do gałęzi wydań lub nowej gałęzi funkcji, gdy klonują twoje repozytorium, lub po prostu nie chcesz śledzić wielu klonów w całym miejscu. – krupan
- 1. Pomóż zrozumieć flagę globalną w perlu
- 2. Pomóż zrozumieć implementację Sieve of Eratostenes
- 3. Pomóż mi zrozumieć WebDAV i Autoverwersję
- 4. Pomóż mi zrozumieć ten binarny format pliku
- 5. Pomóż mi zrozumieć to wykorzystanie boost :: wiążą
- 6. Pomóż mi zrozumieć moduł logowania Pythona i jego moduły obsługi
- 7. Pomóż mi lepiej zrozumieć Struts2, sprawdzanie poprawności i działania stanowe
- 8. Pomóż zrozumieć parsery LR (1), generowanie tabel? Wszelkie inne zasoby?
- 9. Efektywność rozgałęzienia w shaderach
- 10. R: "Niepoprawna liczba wymiarów" błąd w R - pomóż mi zrozumieć, dlaczego
- 11. Pomóż mi zrozumieć różnicę między obiektami typu CLOB i obiektami typu BLOB w Oracle
- 12. przeszukiwanie wszerz rozgałęzienia czynnik
- 13. Rekomendacja rozgałęzienia TFS
- 14. Szachy: wysoki współczynnik rozgałęzienia
- 15. Rozgałęzienia rtęciowe i zakładki
- 16. Pomóż mi zrozumieć "LINQ to Entities obsługuje tylko podstawowe typy rzutowania danych jednostki Entity"
- 17. Google Forms - Natychmiastowe, warunkowe rozgałęzienia
- 18. Co jest zaletą polecenia rebase w Mercurial?
- 19. Zrozumieć rekursję w Javie
- 20. Krótko mówiąc, jakie są zalety git i mercurial w stosunku do subwersji?
- 21. Zrozumieć fetch_assoc()
- 22. Zrozumieć SFINAE
- 23. Pomóż mi wymyślić strategię wdrażania
- 24. Zrozumieć BufferStrategy
- 25. Pomóż mi z szyfrowania XOR
- 26. Pomóż polecić Qt Opensource Project
- 27. Ustaw lub zresetuj dany bit bez rozgałęzienia
- 28. Ponowna podstawa pod-rozgałęzienia z master
- 29. Zalety stałych
- 30. Zalety Clojure
Jeśli utworzyć wiele głów, który z nich pracujesz? – Webnet
Jeśli * I * tworzę wiele głów, to jest * mój * obowiązek bycia świadomym. Jeśli * I * nie zdołam nawet wyśledzić, nad którym głowicą pracuję, wtedy * I * nie powinno tworzyć wielu głów. Przypuszczalnie podczas usuwania zestawów zmian ze zdalnego repozytorium, dzięki czemu masz wiele głowic, moje zestawy zmian są łatwe do wykrycia, ponieważ mają na sobie moje imię. –
Nie bardzo rozumiem zalety tworzenia oddziału ... Jeśli możesz zaktualizować tylko do 1 głowy, dlaczego masz dwie?Czy nie zawsze po prostu tworzysz inne repozytorium zamiast wielu głów? – Webnet