Mercurial (hg) zatwierdza tylko określone pliki

119

Próbuję zatwierdzić tylko niektóre pliki w Mercurial. Ze względu na to, że hg ma automatyczne dodawanie za każdym razem, gdy próbuję wprowadzić zmianę, chce zatwierdzić wszystkie pliki. Ale nie chcę tego, ponieważ niektóre pliki nie są jeszcze „gotowe”.

Jest

hg commit -I thefile.foo

ale to jest tylko dla jednego pliku. Lepszym sposobem dla mnie byłoby wyłączenie automatycznego dodawania, tak jak w Git. czy to możliwe?

Praveen Kumar Purushothaman
źródło
5
użyć rozszerzenia rekordu? lub możesz określić pliki w wierszu poleceńhg ci foo bar baz
tonfa
4
@tonfa, opublikuj ponownie swój komentarz jako odpowiedź
Andrei Dziahel
Nie niszcz swoich postów.
Glorfindel
Dlaczego niszczysz tak miłego pytającego gościa?
Praveen Kumar Purushothaman

Odpowiedzi:

155

Możesz określić pliki w wierszu poleceń, tak jak pisze tonfa:

$ hg commit foo.c foo.h dir/

To po prostu działa i robię to cały czas. Możesz także użyć --includeznalezionej flagi i możesz jej użyć kilka razy w następujący sposób:

$ hg commit -I foo.c -I "**/*.h"

Możesz nawet użyć zestawu plików, aby wybrać pliki, które chcesz zatwierdzić:

$ hg commit "set:size(1k - 1MB) and not binary()"

Nie ma ustawienia, które wyłączyłoby automatyczne dodawanie i sprawiłoby, że Mercurial działał jak Git. Jednak rozszerzenie mq może być interesujące. To zaawansowane rozszerzenie, ale pozwala

$ hg qnew feature-x     # create new patch
$ hg qrefresh -s foo.c  # add a file to the current patch
$ hg qrefresh -s bar.c  # add another file to the patch
$ hg qfinish -a         # convert applied patches to normal changesets

Jednak tak naprawdę nie używam MQ do tego celu, ponieważ myślę, że wystarczy podać nazwy plików w wierszu poleceń.

Martin Geisler
źródło
Jakie zachowanie „automatycznego dodawania”? Czy hg używał automatycznego dodawania plików? Ponieważ teraz musisz to zrobić wyraźnie, inaczej nie będą śledzeni.
mpen
1
@mpen Myślę, że ma na myśli to, jak gh automatycznie dodaje każdy zmodyfikowany plik do zatwierdzenia, w przeciwieństwie do gita, w którym musisz ręcznie dodać zmodyfikowane pliki do następnego zatwierdzenia, a niektóre zmodyfikowane pliki mogą pozostawić niezatwierdzone
simpleuser
24

Jeśli chcesz zatwierdzić kilka plików i wykluczyć wiele innych, jawnie wymień pliki, które chcesz zatwierdzić. -Ijest potrzebny tylko wtedy, gdy chcesz używać wzorców zamiast plików.

Jeśli chcesz zatwierdzić wiele plików i wykluczyć tylko kilka plików, użycie -Xjest wygodniejsze.

Np. Biorąc pod uwagę repozytorium zawierające „plik_1”, „plik_2” i „plik_3”, poniższe są równoważne, ale to drugie jest łatwiejsze / szybsze do wpisania:

hg commit file_1 file_2
hg commit -X file_3
Rob W
źródło
8

Od 3.8 możesz także użyć hg commit --interactivedo wybierania plików (przed 3.8 możesz używać rozszerzenia crecord dla podobnej funkcjonalności). Flaga --interactive(lub po prostu -i) spowoduje, że hg zapyta cię o pliki, które chcesz dołączyć do zatwierdzenia. Jako dodatkowy bonus możesz nawet dołączyć / wykluczyć fragmenty plików.

Oto przykład tego, jak wygląda interfejs. Zauważ, że jest to stary zrzut ekranu (właściwie crecord), więc interfejs nieznacznie się zmienił (ale podstawy są takie same). zrzut ekranu crecord

Uwaga, aby uzyskać ten interfejs, musisz mieć włączony interfejs curses. Możesz to zrobić dla pojedynczego przebiegu z hg commit --config ui.interface=curses --interactivelub ogólnie, dodając następujące elementy do .hgrc:

[ui]
interface = curses
studgeek
źródło