2011-06-17 7 views
5

Największym problemem, jaki mam, jest to, że jeśli pracuję nad plikami, których nie chcę zatwierdzać, po prostu je zapisuję. Następnie mam inne pliki, które chcę przekazać serwerowi, jednak jeśli ktoś inny wprowadził zmiany w repozytorium, a ja je ściągam. Prosi mnie o scalenie lub zmianę nazwy. Każda z tych opcji spowoduje utratę moich lokalnych zmian, których nie popełniłem.Jak zachować niezatwierdzone zmiany w lokalnym repozytorium rtęci, nadal naciskając/ciągnąc? Korzystanie z hgeclipse

Co inni ludzie robią, aby ominąć to? Uważam, że dokumentacja przedłużania półek trudno jest objąć moją głową.

Używam Mercurial Eclipse do przesyłania i przeciągania plików do/z serwera. Wszelkie wyjaśnienie tego byłoby bardzo cenne! Dzięki!

Przykład:

pracuję na mojej stronie w Mercurial Eclipse .. mam nowy folder i nowe pliki, które nie chcą zobowiązać się do serwera jeszcze. Zmodyfikowałem także niektóre istniejące pliki i nie chcę jeszcze wprowadzać tych zmian na żywo. Potem coś na mojej stronie się psuje i muszę to naprawić, nie pozwoli mi to naprawić bez ponownego rozpisania się lub połączenia z najnowszą końcówką repozytorium, a to spowoduje, że stracę wszystkie moje niezatwierdzone zmiany. Co powinienem zrobić z moim nowym folderem i plikami, które edytowałem, jeśli nie chcę ich zgubić? Ponowne klonowanie wydaje się nudne. Kopiowanie plików do nowego folderu również wydaje się żmudne. Jestem pewna, że ​​Shelving lub MQ zrobią to, co chcę, po prostu nie wiem jak to jeszcze zrobić.

+0

Podaj nam, z której dokumentacji półki korzystasz i jakie części masz problemy. –

+1

możliwy duplikat [użyteczności Mercurial] (http://stackoverflow.com/questions/6390436/mercurial-usability). @Jason: jeśli chcesz zmienić swoje pytanie, użyj przycisku 'edit', nie publikuj nowego pytania. – Gilles

+0

Nie mogę znaleźć żadnej dokumentacji dotyczącej używania rozszerzenia MQ w Mercurial Eclipse. Przeszedłem przez tę dokumentację [link] (http://mercurial.selenic.com/wiki/MqTutorial) "MqTutorial". Chyba nie rozumiem, jak dokładnie używać łat i przepływu pracy. Dodam przykład tego, co próbuję zrobić w moim pytaniu. – Jason

Odpowiedz

2

Jestem pewien, że ktoś pomoże ci znaleźć złe rozwiązanie, ale najlepszą drogą jest zmiana celów - po prostu zatwierdz. Kod, który nie został zatwierdzony, nie został zapisany. Jeśli nie możesz znieść częstych popełnień w historii, użyj Mercurial Queues z repozytorium kolejek i zatwierdź to. Następnie możesz wywołać zestawy zmian, nacisnąć/wyciągnąć/scalić i ponownie je wypchnąć, a cała cenna praca zostanie zatwierdzona w kolejce poprawek.

+0

Nie mogę wydawać się dowiedzieć, jak działa kolejka w Mercurial Eclipse. Wszelkie dodatkowe wyjaśnienie tego byłoby bardzo cenne! – Jason

+1

Teraz część mnie nie rozumiała pop/push i tak dalej. Tak więc dla każdego, kto się zastanawia ... Tworzysz łatkę (qnew), rób wszelkie zmiany, które musisz wprowadzić, ale nie chcesz tego zatwierdzać, następnie qrefresh aktualizuj łatę, qpop, aby usunąć łatkę i wprowadzić zmiany, które chcesz naciskaj od razu. qpush, aby wrócić do łaty. – Jason

3

W odniesieniu do przykładowej sytuacji, oto co bym zrobił (po strategię Ry4an do właśnie popełnić rzeczy, nad którymi obecnie pracujemy, ale nie chcą już publikować):

Podobno rozpocząć pracę w repozytorium takim jak ten:

$ hg status -A 
C f1 
C f2 
$ hg glog 
@ changeset: 1:7f3c6c86a92f 
| tag:   tip 
| summary:  add f2 
| 
o changeset: 0:03ca1e6d5b86 
    summary:  initial 

To jest 2 pliki i 2 zatwierdzenia/zestawy zmian. Państwo popracować, powiedzmy dodać nową funkcję, a następnie kopia robocza może wyglądać następująco:

$ hg status 
M f2 
? f3 
? f4 

Są 2 nowe i 1 zmodyfikowanego pliku. Teraz musisz naprawić błąd, dla którego potrzebujesz także nowych zmian w zdalnym repozytorium. Snapshot bieżącą pracę popełniając go i wyciągnąć zdalnych zmian (w jakiej kolejności to zrobisz to nie ma znaczenia, pull domyślnie nie dotyka stanu kopii roboczej):

$ hg commit -A -m "snapshot feature work" 
$ hg pull 

To może spowodować Historia tak:

o changeset: 3:2284ba62de07   <-- just pulled in 
| tag:   tip 
| parent:  1:7f3c6c86a92f 
| summary:  edit f1 
| 
| @ changeset: 2:4a19d371a04f   <-- your interrupted work 
|/ summary:  snapshot feature work 
| 
o changeset: 1:7f3c6c86a92f 
| summary:  add f2 
| 
o changeset: 0:03ca1e6d5b86 
    summary:  initial 

teraz można zaktualizować do rewizji 3/kasa i rozpocząć naprawianie błędów:

$ hg update 3 
.. fix the bug .. 
$ hg commit -m "fix a bug" 
$ hg glog --limit 3 
@ changeset: 4:5d3d947fb4af 
| tag:   tip 
| summary:  fix a bug 
| 
o changeset: 3:2284ba62de07 
| parent:  1:7f3c6c86a92f 
| summary:  edit f1 
| 
| o changeset: 2:4a19d371a04f 
|/ summary:  snapshot feature work 
: 

wygląda dobrze, niech push fix, czylisprawiają, że żyje, a nie publikowania pośrednią pracę:

$ hg push -r 4 

To popycha wszystkie zmiany prowadzące do rewizji swojej naprawienie 4, ale nie ma innych oddziałów w lokalnym repozytorium. Można również użyć wartości -r ., która odnosi się do wersji nadrzędnej kopii roboczej, tj. Wersji, którą właśnie zatwierdziłeś.

Wreszcie można wrócić do pracy funkcji i kontynuować swoją pracę:

$ hg update 2 
.. work, commit, work, commit .. 
.. finally merge with the other branch, e.g. revision 4 

Te kroki są w linii poleceń, ale myślę, że to nie jest ciężko, aby dostosować ogólną koncepcję do odpowiednich kliknięć w Wtyczka Eclipse Mercurial.

Niektóre dodatkowe uwagi:

  • Możesz zakładki Twój migawka popełnić, więc nie trzeba pracować z identyfikatorami rewizyjnych lub cyfr.
  • Jeśli chcesz opublikować swoje funkcje w jednym zatwierdzeniu później, po zakończeniu wykonaj rozszerzenie zwiń.
+0

Po prostu notatka: nazywa się to techniką * nudge *. Zobacz http://hgtip.com/tips/advanced/2009-09-28-nudge-a-gentler-push/ –

Powiązane problemy