Jestem użytkownikiem git mylonym przez rozgałęzienia mercurial. Jak mam śledzić małe zmiany?

32

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 lognadal pokazują, że zatwierdzenie i defaultgałąź 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 updatepo pociągnięciu za automatyczne przeniesienie mojej masterzakł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?

Anton Barkovsky
źródło

Odpowiedzi:

22

Osobiście w twoim scenariuszu nie zawracałbym sobie głowy tworzeniem oddziału, chyba że pracowałem nad wieloma zmianami, z których każda musiałaby zostać zaakceptowana przez głównych programistów.

Wystarczy sklonować swoje repozytorium i pracować w nim, a następnie złożyć żądanie ściągnięcia.

Gdybym miał użyć gałęzi, wolałbym używać nazwanych gałęzi. Zostały zaprojektowane do tego właśnie celu, w którym nie było zakładek. Nie rozumiem, dlaczego uważasz to za ciężkie.

Mercurial ma całą stronę na swojej wiki opisującą różne sposoby „ Przycinania martwych gałęzi ”. Opcja „Korzystanie z klonowania” powinna spełniać Twoje wymagania.

Aby odpowiedzieć na bardziej szczegółowe pytania ...

Dziennik TortoiseHG i hg nadal pokazuje, że zatwierdzenie i domyślna gałąź ma 2 głowy. A jeśli dobrze rozumiem, nie można usunąć zatwierdzeń w formacie hg bez dodatkowych wtyczek.

To błąd, który popełniłem z Mercurialem, kiedy byłem nowy. Nie bój się tych dodatkowych wtyczek. Niektóre z nich są bardzo potężnymi narzędziami i często zostają później wciągnięte w główny produkt. Tak właśnie działa Mercurial. Jeśli potrzebujesz, aby wykonać określone zadanie, zdobądź je i użyj.

Zmiana historii jest uważana za złą rzecz w świecie Mercurial, więc produkt waniliowy nie zawsze ma wszystko, co użytkownik Git uważa, że ​​powinien, ale jest wiele wtyczek dla tych, którzy chcą korzystać z aplikacji, ale mają różne priorytety.

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.

Nie martw się o numery wersji. Są kwestią wygody, nigdy więcej. Kody skrótu są ważnymi identyfikatorami, które będą przekazywane od repo do repo. Numery wersji są niespójne we wszystkich repozytoriach. Sprawdź Hg Init, aby uzyskać dobre wyjaśnienie.

Numery wersji to tylko przydatny i bardziej niezapomniany skrót podczas pracy z jednym repozytorium.

Robię aktualizację hg po wyciągnięciu, aby automatycznie przenieść moją główną zakładkę do ostatniego zatwierdzenia, ale nie mogłem znaleźć sposobu, aby to zrobić w TortoiseHG.

Korzystając z TortoiseHG, używaj Workbench zamiast innych narzędzi. Wszystko (prawie) jest tam. Aktualizacja znajduje się w menu kontekstowych wersji. Nie zawsze jest to intuicyjne, ale pod powyższym linkiem znajduje się dobry przewodnik, a gdy się do tego przyzwyczaisz, kończysz z pewną rezygnacją.

pdr
źródło
Z pewnością widziałem ten argument przed tym, że odpowiednio nazwane gałęzie oznaczają, że edycja historii jest mniej potrzebna w hg
jk.
9

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

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.

Dziennik TortoiseHG i hg nadal pokazuje, że zatwierdzenie i domyślna gałąź ma 2 głowy.

To jest właśnie powód, aby używać nazwanych gałęzi zamiast wrzucać wszystko do default.

A jeśli dobrze rozumiem, nie można usunąć zatwierdzeń w formacie hg bez dodatkowych wtyczek.

Nie możesz w ogóle niczego usunąć w Mercurial i nie powinieneś . Możesz używać, hg stripale 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.

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.

Liczby nic nie znaczą. Możesz je zignorować, jeśli cię mylą.

Robię aktualizację hg po wyciągnięciu, aby automatycznie przenieść moją główną zakładkę do ostatniego zatwierdzenia, ale nie mogłem znaleźć sposobu, aby to zrobić w TortoiseHG.

Nie użyłem TortoiseHG, ale hg pull -uzrobię oba pulli update.

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.

W porządku, wielu użytkowników Mercurial czuje to samo o Git (w tym ja).

smutny koleś
źródło
6

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:

  • Możesz sprawdzić, jakie masz głowy hg heads, jeśli widzisz ponad 2 głowy w jednej nazwanej gałęzi, najlepiej jest je scalić. Prawdopodobnie tam jest twoja zakładka .
  • Aby pozbyć się właśnie wprowadzonej wersji, możesz to zrobić hg rollback, ale domyślam się, że tak nie jest.
  • Aby usunąć zakładkę, po prostu zrób hg bookmark --delete yourbookmark
  • Będziesz szczęśliwy, że w historii łatwo jest ścinać gałęzie. Sprawdź rozszerzenie Rebase i operację Strip .
  • Mercurial jest już w pakiecie z kilkoma rozszerzeniami, ale domyślnie nie są aktywowane . Wystarczy przejść do dowolnego folderu i kliknąć prawym przyciskiem myszy w dowolnym miejscu, aby wyświetlić menu kontekstowe TortoiseHG, przejść do Ustawień globalnych, a następnie Rozszerzenia: aktywować rozszerzenie MQ i rozszerzenie Rebase. Nie wpływa to w żaden sposób na zgodność między repozytoriami.
  • Teraz, gdy już tu jesteś, możesz:
    • Rozwiń miejsce, w którym zaczęła się twoja zakładka (prawdopodobnie rozwiązuje to problem)
    • Aby ułatwić wizualizację, możesz zmienić podstawy z przodu, a następnie rozebrać je później. Właśnie wspomniałem o rebase, ponieważ może być dla ciebie przydatny w innym czasie.

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 .

dukeofgaming
źródło
Nie ma sposobu, aby zagwarantować, że wszystkie zdecentralizowane kopie zestawów zmian, które rejestrują nazwaną gałąź, zostały usunięte po uruchomieniu 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.
Shelby Moore III
1

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.

bc.cam
źródło
-1

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.

Weijing Lin
źródło