Mercurial: tutti i file che sono cambiati in un changeset?


Risposte:


149

Se vuoi elencare solo i file che sono cambiati allora dovresti usare "comando di stato" Quanto segue elencherà le modifiche ai file nella revisione REV

hg status --change REV

13
+1, ma probabilmente anche l'OP vuole il flag -n/ --no-status.
Niall C.

7
Per una facile copia:hg status --no-status --change REV
zastrowm

+1 Questo è molto più facile da digitare rispetto a quello hg status --rev REV~1:REVche facevo io.
Patrick Oscity

3
uso '.' per l'attuale REV. significato -hg status --change .
zaxy78

16

Basta rimuovere pdal tuo hg log -vprmostrerà l'elenco dei file. -psignifica mostra patch. È inoltre possibile utilizzare un modello per formattare l'output secondo i propri gusti.


3
Penso che avrai bisogno del seguente modello: --template 'files: {files} \ n'
Ton Plomp

1
Credo che {files}
faccia

2
hg log -r. --template "{join (files," \ n ")}" per separare i file da una nuova riga
Foxichu

1
@ Il commento di Foxichu ha funzionato per me, ma è stato un po 'hacky. in realtà la risposta superiore - ha hg status --change .funzionato meglio e ha fornito un prefisso di azione del file (A \ M \ D ecc.) E un percorso relativo migliore
zaxy78

13

So che la domanda è per un singolo changeset, ma se desideri che tutti i file vengano modificati per un intervallo di changeset, puoi farlo

hg status --rev 1 --rev 10 -m

2
Terribile male. I file modificati nell'intervallo sono hg log -r BEGIN:END --template "{files}\n"quelli che @ geoffrey-zheng e @ton hanno scritto due anni fa !!!
Tasso pigro

Mi dispiace per quello. Presumevamo che la loro risposta fosse per il singolo changeset.
Nick DeVore

1
Secondo me questa risposta non è così terribile. hg status --rev BEGIN --rev ENDè: 1. molto più facile da ricordare rispetto a hg log -r BEGIN:END --template "{files}\n"; 2. stampa i file in righe separate senza utilizzare sed(@Eric Lawler) o join()(@Foxichu); 3. senza -mflag, mostra non solo i file modificati, ma anche aggiunti e rimossi (anche qui si applica la simpatica colorazione standard); 4. ci sono -ae -rflag che consentono diversi filtri; 5. se uno non vuole il prefisso di stato, c'è -nun'opzione, che lo sopprime.
Michał Wróbel

9

Revisione impegnata corrente

hg status --change .

.è una scorciatoia per l'attuale rev, proprio come @HEADin Git

Revisione corrente non confermata

hg status

Revisione arbitraria commessa

hg status --change REV_ID

1
risposta più semplice e precisa!
zaxy78

2

Ho trovato questa domanda tramite Google per un concetto simile. Per mostrare tutti i file che sono cambiati attraverso una serie di changeset, è facile come:

hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n" | sed -e 's/ /\n/g' | sort -d | uniq
  1. hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n"ti mostrerà un elenco di ogni file modificato o aggiunto in ogni changeset, da [start rev] a [end rev], con i file di ogni changeset su una nuova riga. Scambia {file_mods}{file_adds}con {files}per mostrare tutti i file modificati, aggiunti o rimossi.
  2. sed -e 's/ /\n/g' dividerà tutti i file da mostrare su righe separate e
  3. sort ordinerà l'elenco per te in modo da poter filtrare l'elenco con uniq
  4. uniq filtrerà l'elenco per rimuovere i duplicati, i file modificati in più di una revisione.

Questa soluzione unisce l'ultimo file modificato con il primo file aggiunto. Inoltre, non gestisce correttamente gli spazi nei nomi dei file. Una --templatesoluzione basata su una soluzione senza queste carenze potrebbe essere costruita utilizzando join()come suggerito da @Foxichu.
Michał Wróbel

1

So che questa domanda è una vecchia domanda e sono sorpreso che nessuno abbia appena offerto un codice modificato da OP. Ho ottenuto un elenco di file modificati / aggiunti / rimossi (non etichettati, il che è però) semplicemente eseguendo hg log -v. O quello di cui avevo effettivamente bisogno hg log -v -l5per vedere i file che sono stati modificati / aggiunti / rimossi negli ultimi 5 commit (compresi quelli che non ho ancora inserito nel repository).


"nessuno ha appena offerto un codice modificato per il modulo OP" - @Geoffrey Zheng ha fatto esattamente questo ~ 1h dopo che la domanda è stata pubblicata
Michał Wróbel

-2

Se sei come la maggior parte dei negozi, utilizzi un sistema di biglietteria per tenere traccia delle modifiche. Se conosci il numero del ticket e desideri trovare tutti i commit associati a quel ticket (supponendo che tu includa il numero del ticket nel messaggio di commit), puoi usare:

hg log -k TICKET_NUMBER

Questo mostra tutte le revisioni associate al ticket. Tuttavia, non elenca i file. È possibile utilizzare una delle risposte sopra per ottenere l'elenco dei file associati alle revisioni.

Per renderlo più semplice, combinando le informazioni delle risposte precedenti, potresti fare quanto segue per cercare i commit, inclusi i file modificati:

hg log -vk TICKET_NUMBER

Questo è legato alla domanda. Il poster ha chiesto come ottenere i file in un changeset. I changeset sono spesso correlati ai ticket. La mia soluzione mostra come ottenere file relativi ai changeset associati a un ticket.
iDimensionz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.