Jaka jest różnica między zapomnieniem hg a usunięciem hg?

313

Chcę, aby mercurial usunął kilka plików z bieżącego stanu repozytorium. Chcę jednak, aby pliki istniały we wcześniejszej historii.

Jak zrobić forgeti removeróżnią się i mogą robić to, co chcę?

Paul Nathan
źródło
27
Nie martw się, nie możesz usunąć pliku z wcześniejszej historii w Mercurial - historia jest zasadniczo niezmienna, chyba że zaczniesz używać rozszerzeń.
Martin Geisler

Odpowiedzi:

348

hg forget” to tylko skrót od „ hg remove -Af”. Z pomocy „ hg remove”:

... i -Af można użyć do usunięcia plików z następnej wersji bez usuwania ich z katalogu roboczego.

Konkluzja: „ remove” usuwa plik z kopii roboczej na dysku (chyba że używasz -Af), a „ forget” nie.

Ry4an Brase
źródło
7
„hg zapomnij” zostało ponownie wprowadzone w Mercurial 1.3 jako łatwiejszy sposób na „hg remove -Af”. Planuje usunięcie pliku bez usuwania go z kopii roboczej.
Martin Geisler,
5
Miło to słyszeć. „remove -Af” (i cała tabela opcji na stronie pomocy „remove”) to / było szaleństwo.
Ry4an Brase
32
@ Ry4an: Poważnie, to było śmieszne. Włączyłem łatkę, która przywróciła „zapomnienie”. Kiedy to robiłem, zdałem sobie sprawę, że -Af miał pełny sens w kodzie, ale z punktu widzenia użytkownika było to całkowicie śmieszne.
Steve Losh,
10
Heh, właśnie to jest świetne w rtęci - ludzie aktywnie i iteracyjnie myślą o tym, co ma sens z punktu widzenia użytkownika. Dzięki za naprawienie tego.
Ry4an Brase
9
Pliki konfiguracji kompilacji lokalnej lub podobne? Ścieżki do lokalnych narzędzi, które różnią się w zależności od systemu? Przypadkowo dodałem plik dziennika, którego nie chcesz w kontroli źródła, ale chcesz zapisać? Chyba tak się dzieje.
Ry4an Brase
42

Najlepszym sposobem, aby umieścić to, że hg forgetjest identyczny do hg remove except że pozostawia za sobą pliki w swojej kopii roboczej. Pliki są pozostawione jako pliki nieśledzone i można je teraz opcjonalnie zignorować za pomocą wzorca w .hgignore.

Innymi słowy, nie umiem powiedzieć, czy używałeś, hg forgetczy hg removekiedy cię odciągam. Plik, który został uruchomiony hg forgetna zostanie usunięte podczas aktualizacji do tej changeset - tak jakbyś używał hg removezamiast.

Martin Geisler
źródło
27

Z dokumentacji można najwyraźniej użyć dowolnego polecenia, aby zachować plik w historii projektu. Wygląda na to, że chcesz usunąć, ponieważ usuwa również plik z katalogu roboczego.

Z książki Mercurial na http://hgbook.red-bean.com/read/ :

Usunięcie pliku nie wpływa na jego historię. Ważne jest, aby zrozumieć, że usunięcie pliku ma tylko dwa efekty. Usuwa bieżącą wersję pliku z katalogu roboczego. Powstrzymuje Mercurial przed śledzeniem zmian w pliku od momentu następnego zatwierdzenia. Usunięcie pliku w żaden sposób nie zmienia jego historii.

Strona podręcznika hg (1) mówi o zapomnieniu:

Zaznacz określone pliki, aby nie były już śledzone po następnym zatwierdzeniu. Usuwa to tylko pliki z bieżącego oddziału, a nie z całej historii projektu i nie usuwa ich z katalogu roboczego.

I chodzi o usunięcie:

Zaplanuj wskazane pliki do usunięcia z repozytorium. Usuwa to tylko pliki z bieżącego oddziału, a nie z całej historii projektu.

Jason Catena
źródło
3

Jeśli użyjesz "hg remove b"pliku przeciwko statusowi „A”, co oznacza, że ​​został dodany, ale nie został zatwierdzony, Mercurial odpowie:

  not removing b: file has been marked for add (use forget to undo)

Ta odpowiedź jest bardzo wyraźnym wyjaśnieniem różnicy między usunięciem a zapomnieniem.

Rozumiem, że "hg forget"chodzi o cofnięcie dodanego, ale niezaakceptowanego pliku, aby nie był śledzony przez kontrolę wersji; podczas"hg remove" służy do wyjęcia zatwierdzonego pliku z kontroli wersji.

Ten wątek ma na przykład używając hg removeprzeciwko plików 7 różnych rodzajów statusu.

gm2008
źródło
2

Plik można śledzić lub nie, użyj hg add do śledzenia pliku, a hg usuń lub hg zapomnij go cofnąć. Użycie hg remove bez flag spowoduje zarówno usunięcie pliku, jak i jego wyśledzenie, hg zapomnij po prostu wyśledzi go bez usuwania.

Tao
źródło
3
Nie wiem, dlaczego poczułeś potrzebę dodania tego cytatu, kiedy sam człowiek już się do niego przyłączył, ale hej, cokolwiek płynie twoją łodzią.
Nathan Tuggy