Rozważam migrację 14-letniego repozytorium CVS (historia nienaruszona) do mercurial. Myślę, że mam wszystkie techniczne bity konwersji, ale wciąż mam pytania dotyczące efektywnej pracy w rtęci.
Jedną z rzeczy, które bardzo często widzę w piaskownicach cvs poszczególnych programistów (w tym mojej), są lokalne niezaangażowane zmiany, które nie są gotowe do wypchnięcia do głównej linii. Rozumiem, że to zła rzecz. Większość moich eksperymentów z hg sugeruje, że niezatwierdzone zmiany są złe. Wystarczy niemożność połączenia się z nimi. Chcę więc wiedzieć, jak radzą sobie z tym inni ludzie używający rtęci w codziennym kodowaniu. Jak radzisz sobie z niekompletnymi zmianami w kodzie, gdy przychodzi czas na aktualizację repozytorium? Jak radzisz sobie ze zmianami lokalnymi, których (jeszcze) nie chcesz udostępniać innym programistom?
Dodam kilka rzeczy.
Jednym z nich jest zasugerowanie przepływu pracy, który rozsądnie wykorzystuje półkę , która jest standardowo dostarczana z TortoiseHg .
Ilekroć chciałem zatwierdzić część mojego bieżącego katalogu roboczego, odłożyłem na półkę zmiany, których nie chciałem zatwierdzić, ponownie skompilowałem (aby upewnić się, że nie odłożyłem bitów, które teraz powodują przerwanie kompilacji), a następnie uruchomiłem testy . Następnie oddałbym pełny, działający i przetestowany zestaw. W końcu uciekłbym bez pomocy, by przywrócić moje zmiany.
Gdybym miał raczej bardziej trwałe zmiany, powiedzmy, że chcę, aby plik konfiguracyjny na moim komputerze programistycznym zawsze wskazywał na port 3333 hosta lokalnego, a nie na serwer produkcyjny, wtedy rozważałbym użycie rozszerzenia Kolejki Mercurial, które jest dostarczane zarówno z Mercurial, jak i TortoiseHg .
źródło
Nie wierzę, że niezaangażowane zmiany są z natury złe. Odwołujesz się do „niemożności scalenia się z nimi” - jeśli masz niezaakceptowaną zmianę w jakimś pliku, a wyciągniesz i zaktualizujesz zmianę do tego pliku, Mercurial rozpocznie proces scalania tak, jakbyś go popełnił, a następnie poprosił o połączenie. Miałeś na myśli coś innego?
Tak więc w przypadku lokalnych zmian, których nie chcesz jeszcze udostępniać innym programistom, masz dwa podejścia. Pierwszym jest zachowanie zmian w kopii roboczej, ale nie wypychanie ich, a drugim - odłożenie ich na bok, poza kopię roboczą. Wybór zależy od tego, czy chcesz, aby te zmiany były dostępne podczas pracy.
Jeśli zachowasz je w kopii roboczej, nadchodzące zmiany będą działać dobrze, więc musisz tylko unikać tworzenia zmian wychodzących, a to oznacza, że nie będziesz ich zatwierdzać. Jeśli pliki są nowe, to proste - po prostu
hg add
ich nie rób . Jeśli są już śledzone, możesz w szczególności wykluczyć je z zatwierdzeń za pomocąhg commit --exclude foo.txt
. Jeśli masz dużą liczbę plików do wykluczenia lub będziesz je wykluczał z wielu zatwierdzeń (np. W celu trwałej zmiany lokalnego pliku konfiguracyjnego), spójrz na rozszerzenie wykluczania .Jeśli jesteś przygotowany na przesunięcie zmian na bok, masz inny zestaw opcji. Najprostszą rzeczą jest po prostu użycie
hg diff
plików do utworzenia łatki opisującej je, którą przechowujesz w bezpiecznym miejscu, a następniehg patch --no-commit
ponowne zastosowanie tej łatki, gdy chcesz przywrócić zmiany. Można dokonać tego gładsza instalując rozszerzenie do półek , z rozszerzeniem na poddaszu , albo jakiś inny krewny. Możesz także użyć rozszerzenia kolejek , ale używasz młota, aby złamać orzecha. Możesz nawet po prostu zatwierdzić zmiany, a następnie zaktualizować z powrotem do rodzica i tam wykonać inną pracę, pozostawiając zmiany whg commit -m 'temporary branch' && hg up $(hg log -r 'parents(.)' --template '{node}')
uproszczonej anonimowej gałęzi - (chociaż może być łatwiej to zrobić ręcznie!). Trzeba jednak uważać, aby nie wcisnąć tego zestawu zmian.źródło
Do rozdzielenia strumieni rozwoju stosuje się dwa podstawowe podejścia.
Nazwane oddziały. Chodzi o to, że pracujesz nad własnym oddziałem, nmichaels_branch_of_awesome. W ten sposób możesz zatwierdzić swoje zmiany bez smażenia pracy innych ludzi. Następnie łączysz się z innymi ludźmi, gdy potrzebujesz ich pracy, a kiedy przychodzi czas na tę funkcję, przesuwasz się do bardziej stabilnej gałęzi w celu integracji. Preferuję nazwane gałęzie.
Anonimowy klon. To tworzy oddzielne repozytorium dla twojej piaskownicy. Tutaj bawisz się, dopóki nie dostaniesz tego, co chcesz, a następnie (prawdopodobnie) zrób łatkę MQ dla swoich zobowiązań i przejdź do miejsca, w którym zacząłeś. Nie przepadam za tym podejściem, ponieważ wymaga ono zarządzania katalogami i potencjalnie pracy z MQ, co może być trudne. A przy niektórych repozytoriach mogą zacząć robić to tylko trochę . To powiedziawszy, wydaje się, że jest to preferowane przez twórców z Kiln.
źródło