Tutorial - esaminare la cronologia di un repository
A questo punto, dopo aver appreso dalla sezione TutorialCopia per copiare un repository; la nostra copia in locale si chiama my-hello.
Diamo un'occhiata alla cronologia di questo repository. Per farlo usiamo il comando log. Questo stampa un sommario di ciascuna modifica effettuata nel repository, mostrati in ordine dal più recente al più vecchio.
$ cd my-hello $ hg log changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile changeset: 0:0a04b987be5a user: mpm@selenic.com date: Fri Aug 26 01:20:50 2005 -0700 summary: Create a standard "hello, world" program
Queste linee di output necessitano di alcune spiegazioni.
Ciascun paragrafo descrive un particolare changeset. Un changeset corrisponde alla modifica di uno o più file, raggruppati in una sola unità logica.
- Nel caso mostrato in precedenza, possiamo notare come la cronologia del repository consista di due changesets.
changeset identifica un changeset.
- Il primo numero prima del carattere "due punti" è un numero di "revisione"( revision number); è un modo pratico di identificare il changeset, valido però soltanto all'interno del repository.
La stringa esadecimale che troviamo dopo è una forma abbreviata del changeset ID; identifica il changeset ed è lo stesso in tutti i repository che contengono questo changeset. Se si parla con qualcun altro, sarebbe molto meglio usare il changesetID e non il numero di revisione.
tag è un tag, un nome simbolico arbitrario per un changeset.
- E' possibile asseganre uno o più tag a un changeset. Al momento non molti changeset hanno tag associati, così la linea per il tag è raramente presente.
Il tag speciale chiamato tip identifica ovviamente il tip, che è il changeset più recente nel repository. Se si crea successivamente un altro changeset (e qui lo faremo presto), il teg tip sarà spostato nel nel nuovo changeset, che sarà divenuto ovviamente il più recente.
user identifica la persona che ha creato il changeset. Questa è una stringa libera da forma; normalmente contiene un indirizzo di e-mail e talvolta il nome proprio.
date marca quando è stato creato il changeset. Queste date sono segnate secondo il fuso orario del creatore del changeset.
summary da una prima descrizione sommaria del changeset. Questo "sommario"
viene inserito dal creatore del changeset al momento della creazione, per aiutare se stessi e gli altri a capire il senso del changeset(cfr. anche ChangeSetComments).
parent identifica il changeset genitore, nel caso ce ne sia più di uno, cosa che accade quando si effettua il merge di più repository.
- Il più delle volte c'è un solo genitore, che è il solo changeset più vecchio di se stesso. Questo infatti è il caso dell'esempio sopra.
Possiamo ottenre una cronologia più dettagliata chiedendo un verbose output con l'opzione -v, o l'opzione globale --debug:
$ hg log -v changeset: 1:82e55d328c8ca4ee16520036c0aaace03a5beb65 tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 files: Makefile description: Create a makefile (...) $ hg log --debug manifest: 1:0c7c1d435e6703e03ac6634a7c32da3a082d1600 changeset: 1:82e55d328c8ca4ee16520036c0aaace03a5beb65 tag: tip parent: 0:0a04b987be5ae354b710cefeba0e2d9de7ad41a9 parent: -1:0000000000000000000000000000000000000000 user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 files+: Makefile description: Create a makefile (...)
Il "verbose output" contiene alcuni campi in più rispetto all'output di default.
changeset ora mostra la forma non abbreviata del changeset ID.
files fa una lista dei file modificati in questo changeset.
description contiene la descrizione multilinea completa del changeset, anzichè soltanto la prima linea.
- Nel nostro caso le descrizioni sono lunghe solo una linea, così non si nota molto la differenza.
L'output --debug aggiunge i seguenti campi al verbose output (cfr. DebuggingFeatures):
file+ presenta la lista dei file aggiunti in questo changeset.
file- mostra una lista di tutti i file rimossi.
manifest mostra il manifest ID per questo changeset.
due campi parent che mostrano entrambi i changeset dei "genitori" di un changeset, dove -1:000000000000000000000000000000000000000 si riferisce a un genitore inesistente.
Il comando log si arricchisce dell'opzione -r nel caso si voglia analizzare un changeset in particolare.
$ hg log -r1 changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile
L'opzione -r al momento supporta una sintassi molto flessibile per selezionare una certa quantità di changeset. Ad ogni modo, a causa del numero limitato di changeset disponibili nel nostro repository d'esempio, non è possibile mostrare una buona dimostrazione. Consultare le pagine relative sul manuale (cfr. manpage) per maggiori informazioni.
Il comando log possiede anche un'opzione -p per mostrare le patches associate ad un changeset:
$ hg log -r1 -p changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile diff -r 0a04b987be5a -r 82e55d328c8c Makefile --- /dev/null Fri Aug 26 01:20:50 2005 -0700 +++ b/Makefile Fri Aug 26 01:21:28 2005 -0700 @@ -0,0 +1,1 @@ +all: hello
Possiamo anche usare il comando tip per mostrare le informazioni riguardanti il tip, ossia il changeset più recente. Il comando tip si può considerare una scorciatoia per il comando log -r tip.
$ hg tip changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile $ hg log -r tip changeset: 1:82e55d328c8c tag: tip user: mpm@selenic.com date: Fri Aug 26 01:21:28 2005 -0700 summary: Create a makefile
Ora che abbiamo un'idea della Cronologia dei changesets, passiamo a vedere come gestire le modifiche. Andiamo a TutorialPrimaModifica.