Generowanie listy plików, które uległy zmianie między wersjami hg

118

Chcę wygenerować listę plików zmienionych między dwiema wersjami w danym katalogu w Mercurial.

W szczególności nie interesuje mnie, co się zmieniło, ale które pliki uległy zmianie w tym katalogu.

Np. Zakładając, że między thena otherthen, tylko 2 pliki uległy zmianie:

>hg hypothetical-command -r then:otherthen
foo.baz
bar.baz
>

Jakie jest hipotetyczne polecenie? Próbowałem diff i log, ale nie widzę, jak ich do tego przekonać: albo dostaję łatkę (diff), albo całe repozytorium (log).

Paul Nathan
źródło

Odpowiedzi:

166
hg status --rev x:y

gdzie xi ysą pożądane numery wersji (lub nazwy znaczników lub gałęzi).

Jeśli używasz terminala w systemie Windows, dodaj, hg status --rev x:y> your-file.txtaby zapisać listę do pliku.

alemjerus
źródło
3
Aby zobaczyć tylko zmiany w bieżącym katalogu:hg status --rev x:y .
Użytkownik
14
Aby zobaczyć zmiany w najnowszej wersji: hg status --rev .^
kunigami
8
Aby uzyskać tylko listę nazw plików (bez prefiksu wskazującego rodzaj zmiany), dodaj -n, np.hg status --rev x:y -n
Cheetah
1
hg status --change .wymienia zmienione pliki w .- tej samej liście co, hg status --rev .^ale bardziej bezpośrednio
Metaxis
14

Status jest tym, czego potrzebujesz.

Ale w zależności od tego, co rozumiesz przez „między dwiema wersjami”, możesz również rozważyć użycie zakresu „ x :: y ” (DAG - Directed Acyclic Graph).

Biorąc pod uwagę równoległe zestawy zmian,

1--2---4 \---3

hg status --rev 1:4 zwróci (1, 2, 3, 4), tj. wszystko pomiędzy punktami końcowymi włącznie, zgodnie z lokalnym, numerycznym rev . Może to (i najprawdopodobniej zwróci) inne wyniki w innych - choć powiązanych - repozytoriach!

hg status --rev 1::4zwróci (1, 2, 4), tj. punkty końcowe i wszystkie zbiory zmian, które są potomkami „1” ORAZ przodkami „4”.

Drugi przypadek, x :: y, jest zwykle bardziej przydatny w rzeczywistych aplikacjach. To właśnie otrzymujesz przez TortoiseHg \ Visual Diff.


> hg help revsets:

"x :: y" Zakres DAG, oznaczający wszystkie zbiory zmian, które są potomkami x i przodkami y, w tym same x i y. Jeśli pierwszy punkt końcowy zostanie pominięty, jest to równoważne z „przodkami (y)”, jeśli pominięto drugi, jest to równoważne z „potomkami (x)”.

martind2112
źródło
1
Może musisz jawnie dołączyć polecenie, aby Twoja odpowiedź nie zależała od drugiego i była bardziej niezawodna. Coś w stylu „Tak, potrzebujesz statusu. Na przykład hg status --rev x::y”.
PhoneixS