2013-08-30 20 views
10

Wraz z rozszerzeniem Mercurial kolejek, mogę zrobić z pustym popełnić jakiś popełnić wiadomość tak:Wykonaj pusty commit z mercurial

hg qnew patch_name -m "message" 

Czy istnieje sposób to zrobić bez kolejek Mercurial? Próbowałem po prostu:

hg commit -m "message" 

ale hg po prostu mówi „nic się nie zmieniło”, a nie robi commit, a ja nie widzę żadnych opcji „siła”, która unieważnia to.

Jeśli zastanawiasz się nad moją motywacją do zrobienia tego: mamy infrastrukturę do testowania, gdzie przesyłasz do specjalnego repozytorium i uruchamia automatyczne testy. Musisz umieścić specjalny ciąg znaków w komunikacie zatwierdzenia najwyższego zatwierdzenia, który mówi, które testy należy uruchomić. Oczywiście, nie chcę tego łańcucha, kiedy popycham do rzeczywistego repozytorium. Zamiast dwukrotnie zmieniać zatwierdzenie (raz, aby dodać specjalny ciąg znaków, i drugi raz, aby go usunąć), znajdę czystsze, aby dodać puste zatwierdzenie, a następnie wycofać je - i mogę to zrobić za pomocą mq, ale chciałbym znaleźć sposób, aby to zrobić bez mq.

Odpowiedz

4

Można dokonać popełnić że zamknięciem oddziału:

hg commit --close-branch -m "message" 

Aktualizacja:

Można zamknąć raz oddział, ale można go ponownie z innym popełnić. Najprostszym sposobem ponownego otwarcia gałęzi bez zmiany plików jest oznaczenie pewnej wersji. Możesz więc użyć hg commit --close-branch dla pustego zatwierdzenia, a następnie dla ponownego otworzenia, hg tag.

Aktualizacja v2

Właściwie można tworzyć nowych pustych zobowiązuje tylko z hg tag polecenia. Ma parametr -m do ustawiania komunikatu zatwierdzenia. Jeśli nie troszczą się o poprawność tagów można używać tylko jednej nazwy znacznika wywołując hg tag z -f parametru:

hg tag t1 -f -m "message" 
+1

Will not operacje te zanieczyszczają historię z zamknięcia oddziału i tworzenia tag wydarzeń? – HighCommander4

+0

Zamknięcie gałęzi nie spowoduje zafałszowania historii. Po prostu doda nowy zestaw zmian. Tworzenie znaczników dodaje nowy zestaw zmian z określonym komunikatem zatwierdzenia, ale można go zastąpić parametrem '-m'. – rpeshkov

+2

Hej, możesz po prostu utworzyć nowe tagi bez zamykania gałęzi. Jeśli nie zależy Ci na tagach, a jedynie na komunikatach commit, możesz użyć tylko jednego tagu i ustawić go z flagą '-f'. Możesz więc utworzyć puste zatwierdzenie z komunikatem 'hg t1 -f -m '". – rpeshkov

11

można wykorzystywać do tworzenia pustych hg commit --amend zobowiązuje.

Po prostu wykonaj dowolne zatwierdzenie i wycofaj zmianę. Następnie złóż oba commity razem.

Przykład:

touch tmp        # create dummy file 
hg add tmp        # add file and... 
hg commit -m "tmp"      # ... commit 
hg rm tmp        # remove the file again and ... 
hg commit --amend -m "empty commit"  # ... commit 
+0

Podobny do 'hg commit --close-branch', to nie utworzy naprawdę pustego zatwierdzenia - nadal pozostawi znacznik w zestawie zmian i utworzy poprawiony pakiet kopii zapasowych.Jednak myślę, że jest to lepsze, ponieważ nie ma potencjalnie mylącego efektu oznaczania gałęzi jako zamkniętej, gdy ma pozostać otwarta. – iamnotmaynard

+0

To nie zadziała, jeśli już zostało wysłane do zdalnego repozytorium – matteo

+4

@matteo Dlaczego nie? Dopóki nie wciskasz dwóch poleceń 'hg commit', wszystko jest w porządku. –