Chcę, aby mercurial usunął kilka plików z bieżącego stanu repozytorium. Chcę jednak, aby pliki istniały we wcześniejszej historii.
Jak zrobić forget
i remove
różnią się i mogą robić to, co chcę?
Chcę, aby mercurial usunął kilka plików z bieżącego stanu repozytorium. Chcę jednak, aby pliki istniały we wcześniejszej historii.
Jak zrobić forget
i remove
różnią się i mogą robić to, co chcę?
Odpowiedzi:
„ 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.
Najlepszym sposobem, aby umieścić to, że hg forget
jest 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 forget
czy hg remove
kiedy cię odciągam. Plik, który został uruchomiony hg forget
na zostanie usunięte podczas aktualizacji do tej changeset - tak jakbyś używał hg remove
zamiast.
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.
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 remove
przeciwko plików 7 różnych rodzajów statusu.
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.