2012-06-13 12 views
8

Come posso sapere quale versione era presente in un repository git in un dato momento?git controlla il momento in cui è stato effettuato il commit di commit

Supponiamo di disporre di un repository condiviso in cui diversi utenti possono inviare modifiche e voglio bloccare un'immagine istantanea alle 12:00 in un dato giorno nel passato.

Se qualcuno effettua un commit locale alle 11.30, ma lo spinge solo nei repository centrali alle 12:30, posso rilevarlo in seguito?

È possibile rilevare se qualcuno che agisce dopo le 12:00 ha impostato un commit locale per avere una data di commit registrata di 11:30, e quindi ha effettuato il push up a monte?

risposta

10

Git non tiene traccia di queste informazioni, ma sono stato in grado di esaminare la data/ora di creazione del file sul file oggetto commit nella directory "objects" nel repository git sul server stesso.

1

È possibile utilizzare un gancio, probabilmente lo post-receive hook per memorizzare da qualche parte le informazioni richieste, o semplicemente abilitare il reflog (è disabilitato per impostazione predefinita in un repository nudo). Il reflog tiene automaticamente traccia della cronologia locale di un ramo e ad es. git reflog -1 --format=%H [email protected]{12:00} ti dirà quale commit è stato il riferimento del master ref alle 12:00.

Nota che il reflog scade, è possibile configurare il tempo di scadenza con gc.reflogexpire.

2

git non registra quando le cose vengono trasferite in un repository (o recuperate per quella questione), solo i due timestamp sugli stessi commit, quindi non penso che ci sia un modo affidabile per farlo senza scrivere ganci che memorizza i metadati aggiuntivi da qualche parte per te, o ti affidi alla registrazione eseguita da git-daemon, ssh o dal tuo server http, a seconda del metodo utilizzato per il push/fetch.