To zachowanie zostało zaprojektowane przez autorów Mercurial: wyobraź sobie, że masz "ręcznie wykonane" niezatwierdzone zmiany w kopii roboczej, nie chcielibyśmy, aby hg import
automatycznie nałożył łatę i zatwierdzili zarówno twoje zmiany, jak i łatkę zmiany z błędnym logiem i obie zmiany uwikłane razem.
Dlatego hg help import
mówi:
Because import first applies changes to the working directory, import will
abort if there are outstanding changes.
Polecenie import jest bardziej do importowania Zestawienia zmian (z metedata gdy dane pochodzą z hg export
) niż tylko wniesienia poprawek. Jeśli masz własne zmiany w kopii roboczej, możesz na przykład nadal używać hg import --bypass
i nie wystąpi błąd, ponieważ zatwierdzenie jest bezpośrednio stosowane do repozytorium, a nie do kopii roboczej. (Uwaga: ale jeśli po prostu zatwierdzisz zmiany, dostaniesz dwie głowy, które musisz scalić .. :-).
Rozwiązaniem z wierszem poleceń dla systemów uniksowych jest użycie polecenia patch
bezpośrednio zamiast hg import
, ponieważ wtedy nie zostanie sprawdzone lokalne modyfikacje. Np
for i in 1 2 etc.
do
patch -p1 < patch$i.diff
done
hg commit ...
Dla nieuniksowych systemów można również czystą Mercurial rozwiązanie, instalując rozszerzenie shelve
, umożliwiając jej w globalnym pliku konfiguracyjnym (mercurial.ini), a następnie użyć shelve
obsłużyć scala jeden plaster po drugim:
hg import --no-commit patch1.diff
hg shelve
hg import --no-commit patch2.diff
hg unshelve
etc.
Jeśli kiedykolwiek by wystąpić konflikt, shelve
wykryje go i trzeba by rozwiązać to wtedy powiedzieć shelve
że rozwiązano z opcją --continue
.
Mam nadzieję, że to pomoże.
o' polecenia patch': nie mam takiego narzędzia w moim folderze mercurial (Windows), mówisz 'Hg łatka'? Jeśli tak, to już wypróbowałem to przed zadawaniem tego pytania SO i po prostu zgłasza ten sam komunikat o błędzie, jak "hg import" – tigrou
Wydaje się być narzędziem "Linux", może instalacja 'cygwin' sprawi, że będzie działał. – tigrou
Nie zdawałem sobie sprawy, że nie korzystasz z Uniksa, tak 'patch' jest narzędziem Unix. Możesz albo: użyć wersji Cygwin, użyć kopii, jak wspomniałeś, albo myślę, że możesz mieć rozwiązanie "czysto-hg", dodam to do mojej odpowiedzi ..;) –