Come posso estrarre tutti i file modificati di un changeset in Mercurial?
-
20-09-2019 - |
Domanda
Fino a poco tempo abbiamo usato SVN per tutti i progetti di nostro studio web, e non v'è una caratteristica molto comoda presente in diversi clienti come sovversiva e TortoiseSVN in grado di estrarre tutti i file che sono stati modificati in una determinata versione.
C'è un modo per farlo in Mercurial? Non mi importa se è fatto tramite una GUI o una riga di comando, è solo molto conveniente avere un insieme di file che sono stati modificati in un certo changeset.
P.S. Devo aver messo sbagliato la prima volta. Ho bisogno di più di un semplice elenco di file, sarebbe bello avere tutti i file esportati a qualche altra cartella.
Soluzione
Sulla risposta di Jerome questo ti porterà i copie dei file che hanno cambiato nella revisione 4:
hg archive --type files --rev 4 -I $(hg log -r 4 --template {files} | sed 's/ / -I /g') ~/changedfiles
Che mette tutti i file che hanno cambiato in revisione quattro in una directory di nome appena creato changedfiles nella vostra directory home.
Se si cambia in:
hg archive --type zip --rev 4 -I $(hg log -r 4 --template {files} | sed 's/ / -I /g') ~/changedfiles.zip
poi si fanno vedere in un archivio zip.
E 'interessante notare che che funziona solo se si dispone di spazi nei nomi dei file. Se hai fatto che cantonata allora avremo bisogno di usare hg status --print0 -r revision -r parent-of-revision
invece, ma si spera che non è necessario.
Si noti inoltre che il numero di revisione, '4' nel nostro esempio, si presenta due volte. Il tutto potrebbe molto facilmente essere avvolto in uno script di shell, e che sarebbe stato parametrizzato in modo che non è necessario ricordarsi di cambiarla in entrambi i luoghi.
Altri suggerimenti
Questo vi dà l'elenco dei file modificati nella revisione 4:
hg log -r 4 --template {files}
Aggiornamento: Se desideri avere un file per ogni linea, è possibile utilizzare lo stile descritto nel libro Hg .
A seconda del Ned, ci sono due comandi:
-
Per ottenere i cambiamenti associati con una particolare revisione, è possibile utilizzare
hg export
:hg export -r 23
Questo genererà un diff di tutte le modifiche (in realtà una patch formattato, pronto per essere applicato)
-
Per ottenere il nome di tutti i file che sono stati colpiti, è possibile utilizzare
hg log
:hg log -r 23 -v
Questo stamperà il meta-informazioni per la revisione, insieme ai nomi dei file che sono stati colpiti.
uscite Questo comando nomi di tutti i file modificati in una revisione specificato:
hg export revision_num | grep ^diff | cut -f 6 -d ' '