Come puoi determinare tutti i file che sono cambiati in un determinato changeset?
Non sto cercando un diff in questo caso, solo un elenco di aggiungi / rimuovi / modifiche.
hg log -vprX
fa un elenco di differenze ma voglio solo i file.
Come puoi determinare tutti i file che sono cambiati in un determinato changeset?
Non sto cercando un diff in questo caso, solo un elenco di aggiungi / rimuovi / modifiche.
hg log -vprX
fa un elenco di differenze ma voglio solo i file.
Risposte:
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
-n
/ --no-status
.
hg status --no-status --change REV
hg status --rev REV~1:REV
che facevo io.
hg status --change .
Basta rimuovere p
dal tuo hg log -vpr
mostrerà l'elenco dei file. -p
significa mostra patch. È inoltre possibile utilizzare un modello per formattare l'output secondo i propri gusti.
hg status --change .
funzionato meglio e ha fornito un prefisso di azione del file (A \ M \ D ecc.) E un percorso relativo migliore
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
hg log -r BEGIN:END --template "{files}\n"
quelli che @ geoffrey-zheng e @ton hanno scritto due anni fa !!!
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 -m
flag, mostra non solo i file modificati, ma anche aggiunti e rimossi (anche qui si applica la simpatica colorazione standard); 4. ci sono -a
e -r
flag che consentono diversi filtri; 5. se uno non vuole il prefisso di stato, c'è -n
un'opzione, che lo sopprime.
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
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.sed -e 's/ /\n/g'
dividerà tutti i file da mostrare su righe separate esort
ordinerà l'elenco per te in modo da poter filtrare l'elenco con uniquniq
filtrerà l'elenco per rimuovere i duplicati, i file modificati in più di una revisione.--template
soluzione basata su una soluzione senza queste carenze potrebbe essere costruita utilizzando join()
come suggerito da @Foxichu.
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 -l5
per vedere i file che sono stati modificati / aggiunti / rimossi negli ultimi 5 commit (compresi quelli che non ho ancora inserito nel repository).
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