Zawsze wcześniej korzystałem z git, ale chcę przyczynić się do Pythona, więc teraz muszę się uczyć rtęci i uważam to za bardzo frustrujące.
Zrobiłem więc kilka małych łatek i chciałem je śledzić jako zatwierdzenia w moim lokalnym repozytorium rtęci. Najwyraźniej istnieją 4 sposoby radzenia sobie z rozgałęzieniami w rtęci . 1 i 4 wyglądały dla mnie całkowicie absurdalnie, nazwane gałęzie wydają się ciężkie i wydaje mi się, że nie powinienem ich używać do szybkich poprawek 1-commit, więc użyłem zakładek.
Teraz moja łatka zostaje odrzucona i chcę usunąć jedną z moich gałęzi zakładek z mojego repozytorium. OK, w git po prostu wymusiłbym usunięcie mojej gałęzi i zapomnienie o tym, więc usuwam moją zakładkę i teraz mam następujące problemy:
TortoiseHG i
hg log
nadal pokazują, że zatwierdzenie idefault
gałąź ma 2 głowy. A jeśli dobrze rozumiem, nie można usunąć zatwierdzeń w formacie hg bez dodatkowych wtyczek.Mercurial ma nie tylko skróty, ale także numery wersji. Ponieważ dodałem kilka własnych zatwierdzeń, wszystkie pobrane później mają różne numery wersji od głównego centralnego repozytorium.
Robię to
hg update
po pociągnięciu za automatyczne przeniesienie mojejmaster
zakładki do ostatniego zatwierdzenia, ale nie mogłem znaleźć sposobu, aby to zrobić w TortoiseHG.
Co ja robię źle? Czy jest to normalne i oczekiwane i czy powinienem po prostu zignorować te problemy? Lub jak mam pracować z moimi oddziałami?
W Mercurial nie tworzysz oddziałów. Każde zatwierdzenie jest w rzeczywistości oddziałem, każde zatwierdzenie może mieć wielu rodziców i wiele dzieci. Są to cztery różne sposoby organizowania tych samych podmiotów.
Państwo może dać im różne nazwy, to nie trzeba , ale jest to dobry pomysł. W nazwanych gałęziach nie ma nic ciężkiego - to tylko dodatkowe metadane. Osobiście wolę nazwane gałęzie od wszystkiego innego w każdej sytuacji.
To jest właśnie powód, aby używać nazwanych gałęzi zamiast wrzucać wszystko do
default
.Nie możesz w ogóle niczego usunąć w Mercurial i nie powinieneś . Możesz używać,
hg strip
ale nie jest on zalogowany - po prostu odciąłeś część lokalnego repozytorium. Nie możesz tego naciskać, a jeśli wyciągniesz z repozytorium, które ma lokalnie usuniętą gałąź, to wróci.Liczby nic nie znaczą. Możesz je zignorować, jeśli cię mylą.
Nie użyłem TortoiseHG, ale
hg pull -u
zrobię obapull
iupdate
.W porządku, wielu użytkowników Mercurial czuje to samo o Git (w tym ja).
źródło
Nawet jeśli Mercurial i Git są podobne, mają różne projekty, być może najważniejszą różnicą projektową jest to, że w modyfikacji Mercurial historia nie jest tak elastyczna jak w git (ponieważ jest to trochę zniechęcone).
Krótka odpowiedź : nie ma znaczenia, jeśli wprowadzisz niewielką liczbę zmian, nadal możesz korzystać z oddziału. Jeśli zastanawiasz się nad usunięciem tej gałęzi, użyj zakładki, aby móc ją później usunąć i rozebrać zmiany.
Po pierwsze, spróbuj rzucić nieco światła na niektóre z wymienionych przez ciebie rzeczy:
1 i 4 uważa się za rozgałęzienie, ponieważ za każdym razem, gdy zatwierdzasz, skutecznie tworzysz nienazwaną gałąź (jeśli w tym samym czasie w twoim źródle / błogosławionym repozytorium jest inny zatwierdzenie), co jest technicznie gałęzią. W metodzie 4 tworzysz nową „głowę”, podczas gdy w metodzie 1 nie . Głowy mają się scalić. Zgadzam się, że metoda 1 jest trochę głupia, ale niektórym wydaje się, że to lubi ... w przypadku małych projektów, tak sądzę.
Jeśli chodzi o metodę 2, nie chodzi o to, że gałęzie są ciężkie, lecz o to, że są trwałe . Nie możesz usunąć gałęzi, chyba że użyjesz czegoś takiego jak przedłużenie paska. Ponownie, filozofia projektowania Mercurial nie zmierza do modyfikacji historii (ale stała się w tym lepsza).
Jeśli chodzi o numery wersji , są one tylko lokalnymi i czytelniejszymi dla człowieka odniesieniami do używania wszystkich poleceń związanych z wersjami. Jeśli lubisz używać skrótów, możesz to zrobić. Numery wersji są tylko skrótem i są ignorowane przez Mercurial w przypadku jakichkolwiek operacji wewnętrznych między różnymi repozytoriami.
Teraz, aby odpowiedzieć na inne pytania:
hg heads
, jeśli widzisz ponad 2 głowy w jednej nazwanej gałęzi, najlepiej jest je scalić. Prawdopodobnie tam jest twoja zakładka .hg rollback
, ale domyślam się, że tak nie jest.hg bookmark --delete yourbookmark
Ponadto w git możesz mieć „prywatne lokalne oddziały”, ponieważ musisz je jawnie wypchnąć, a następnie możesz je usunąć. W Mercurial naciskasz wszystko, co masz , jednak jeśli chcesz tego uniknąć , możesz użyć funkcji Fazy i oznaczyć zestaw zmian jako tajny . Tajne wersje nie zostaną wypchnięte.
Wreszcie, nie robisz nic złego , pamiętaj tylko, że są to po prostu różne narzędzia zbudowane z nieco odmiennych sposobów myślenia, które sprowadzają się do: modyfikowania historii (git) lub niemodyfikowania historii (hg). W Mercurial trudniej jest zastrzelić się w stopę, modyfikując historię (szczególnie za pomocą faz), dlatego niektórzy lubią to lepiej niż git .
źródło
hg strip
. Wydaje mi się, że można tak samo argumentować o zdecentralizowanych kopiach nazw gałęzi Git, z tym wyjątkiem, że nazwane gałęzie mają globalną przestrzeń nazw, a nazwy gałęzi Git nie. I istnieje wiele głów z powodu gałęzi nazw. Jest to rodzaj zakaźnego błędu projektowego dla zdecentralizowanego VCS.Uważam, że z merkurialem najłatwiej nie martwić się o gałęzie. Po prostu znajduję, gdzie w historii chcę edytować i tworzyć zatwierdzenia zgodnie z wymaganiami (inaczej anonimowe gałęzie). Czasami zakładki mogą być przydatne, jeśli muszę skakać między głowami w różnych kontekstach, ale najczęściej nie przejmuję się nimi. Nazwane gałęzie są odpowiednie dla gałęzi o długiej żywotności (gałęzie naprawiające błędy, gałęzie projektu), ale dla poprawek 1- lub 2-zatwierdzających nie są odpowiednim narzędziem do zadania.
Sztuczka z anonimowymi gałęziami polega na ustawieniu ich fazy na „sekret”, jeśli nie chcesz ich popychać, tj. Jeśli chcesz zachować je lokalnie. Jeśli nie chcesz, aby je przesunąć, ale nie chcesz już więcej zobowiązuje oparte na nich, po prostu popełnić „--close oddziałem” na górze z nich, co oznacza, że nie pojawi się na liście i mercurial głów ' przestanie narzekać na wiele głów w tym oddziale.
źródło
Myślę, że możemy po prostu użyć zakładki zamiast oddziału; i tak będziemy nadal wspierać ten produkt, a połączenie dwóch oddziałów w dłuższej perspektywie byłoby dużym bólem głowy.
źródło