2013-09-05 26 views
16

Czy można znaleźć, kto usunął tag git z repozytorium?Zobacz, kto usunął tag git

Załóżmy, że masz repozytorium z autorami. Repozytorium ma znacznik dev i wersje: v0.1.0, v0.1.1 itd.

Ktoś usuwa tag. Jak można znaleźć , który usunął tag git?

+0

Jaki jest Twój repozytorium protokół dostępu? Czy masz uprawnienia do przeglądania dzienników na serwerze repozytorium? –

+0

Używam protokołu 'ssh' ... Nie rozumiem drugiego pytania. Czy masz na myśli 'git log'? –

+0

Domyślnie sprawdzanie dzienników dostępu ssh wymaga uprawnień administratora. Nie, mam na myśli uprawnienia do przeglądania '/ var/log/auth.log' na serwerze repo. –

Odpowiedz

6

Masz dwa rodzaje znaczników:

  • lekkie
  • adnotacją

Lekkie znaczniki są tylko metadane dla commit. Nie mają autorów samodzielnie. Mówienie, że autor tagu jest autorem zatwierdzenia, jest błędne, ponieważ każdy inny mógł oznaczyć to zatwierdzenie przy pomocy lekkiego tagu.

Z kolei znaczniki z adnotacjami są podobne do zatwierdzeń. Dlatego znaczniki z adnotacjami również potrzebują wiadomości podczas ich tworzenia. Mają autora, opis, itp.

Aby poznać autorów tagów, musisz mieć politykę z przypisami do adnotacji. Ale z tego, co wiem, nie ma historii metadanych git repo (katalog .git). Oznacza to, że nie możesz wiedzieć, kto usunął tag/branch/etc, chyba że twój dostawca git ma mechanizm do audytu/log/this.

+0

@CharlesB W ostatnim zdaniu mówiłem, że nie jest to możliwe po prostu z git. –

5

Po tym git końcówką o restoring deleted tags, można wykonać następujące czynności:

Znajdź wszystkie nieosiągalne tagi w git fsck:

git fsck --unreachable | grep tag 

a następnie dla każdej hash popełnienia na wyjściu, uruchom

git show COMMIT_HASH 

Jeśli chcesz skrypt powłoki do wyświetlania wszystkich nieosiągalnych (usuniętych) tagów z odpowiednią osobą (Tagger), możesz uruchomić następujący przecinek nd:

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

EDIT: To nie jest odpowiedź na pytanie zadane rzeczywiste, ale mówi, jak zobaczyć autorom wszystkich tagów nieosiągalny w indeksie.

+3

Odszukuje wszystkie niedostępne obiekty znaczników, ale obiekty znaczników nie są tworzone dla wszystkich znaczników.Pokazuje również, kto utworzył tag, ale pytanie zadaje pytanie, kto usunął tag. – hvd

+0

Hm ... To interesujące. Dlaczego nie tagować obiektów, które mają zostać utworzone dla wszystkich tagów? – Frost

+1

Obiekty znaczników nie są tworzone dla prostego 'git tag-name', ponieważ nie ma powodu, dla którego by były. Jeśli to zrobisz, dodaje się ref i to wszystko, co jest potrzebne. Obiekty znaczników tworzone są tylko za pomocą 'git tag - [asu]', patrz 'git help tag', kiedy wiadomość ma być przechowywana wraz ze znacznikiem, który nie należy do zatwierdzenia. – hvd