2013-09-05 17 views
16

È possibile trovare chi ha eliminato un tag git da un repository?Vedere chi ha eliminato il tag git

Supponiamo di disporre di un repository con contributori. Il repository ha il tag dev e le versioni: v0.1.0, v0.1.1 ecc.

Qualcuno cancella un tag. Come troveresti chi ha cancellato il tag git il?

+0

Qual è il suo protocollo di accesso repository? Disponi delle autorizzazioni per visualizzare i registri sul server di repository? –

+0

Io uso il protocollo 'ssh' ... Non capisco la seconda domanda. Intendi 'git log'? –

+0

Per impostazione predefinita, per il controllo dei registri di accesso ssh è necessario l'accesso come root. No, intendo le autorizzazioni per visualizzare '/ var/log/auth.log' sul server di repository. –

risposta

6

si hanno due tipi di tag:

  • leggeri
  • annotati

I tag leggeri sono solo i metadati per un commit. Non hanno autore da soli. Dire che l'autore di un tag è l'autore del commit è sbagliato, poiché chiunque altro potrebbe averlo taggato con un tag leggero.

I tag annotati sono invece come commit. Questo è il motivo per cui i tag annotati necessitano anche di un messaggio quando li crei. Hanno un autore, una descrizione, ecc.

Quindi, per conoscere gli autori dei tag, è necessario avere un criterio tag annotato. Ma, da quello che so, non esiste una cronologia dei metadati del repository git (directory .git). Ciò significa che non puoi sapere chi ha cancellato un tag/ramo/etc, a meno che il tuo fornitore di git non abbia un meccanismo per controllare/registrare/questo.

+0

@CharlesB Nell'ultima frase stavo dicendo che non è possibile semplicemente con git. –

5

Seguendo questo suggerimento git su restoring deleted tags, è possibile effettuare le seguenti operazioni:

Trova tutti i tag non raggiungibili in git fsck:

git fsck --unreachable | grep tag 

E poi, per ogni hash impegnarsi in uscita, eseguire

git show COMMIT_HASH 

Se si desidera uno script di shell per elencare tutti i tag non eliminabili (eliminati) con la persona rilevante (Tagger), è possibile eseguire la seguente virgola ND:

for commit in `git fsck --unreachable | grep tag | awk '{ print $3 }'`; do 
    git show $commit | grep -E "^(tag|Tagger)"; 
done 

EDIT: Questo non risponde alla domanda effettiva chiesto, ma che ti dice come vedere di tutti i tag irraggiungibili gli autori nell'indice.

+3

Trova tutti gli oggetti tag non raggiungibili, ma gli oggetti tag non vengono creati per tutti i tag.Inoltre, questo mostra chi ha creato il tag, ma la domanda chiede di trovare chi ha cancellato il tag. – hvd

+0

Hm ... È interessante. Perché non taggare gli oggetti creati per tutti i tag? – Frost

+1

Gli oggetti tag non vengono creati per un semplice 'git tag nome-tag', perché non c'è alcun motivo per cui lo sarebbero. Se lo fai, viene aggiunto un ref, e questo è tutto ciò che è necessario. Gli oggetti tag vengono creati solo con 'git tag - [asu]', vedi 'git help tag', quando un messaggio deve essere memorizzato insieme al tag, che non appartiene ad un commit. – hvd

1

Git in realtà non registra ciò che accade durante la spinta. Questo post git: how to see changes due to push?, suggerisce che il reflog è aggiornato su un push, ma dubito che accederà alla cancellazione di un tag.

È possibile disattivare tag eliminazione su una spinta (ed è una buona idea): Disable tag deletion

Problemi correlati