git blame: cosa? A che cosa serve questo comando? Per quale motivo esiste? In questo articolo ho il piacere di spiegarti tutto questo in meno di 5 minuti di lettura!
C’è da dire che git, all’interno della sua flora e fauna, offre non pochi comandi, non poche utilità e… Beh, sì: l’ho elogio in non pochi punti lo ammetto.
È uno strumento molto, ma molto completo: così completo da offrirti un comando che permette di fare analisi approfondita nello stesso repository.
Indovina un po’ qual è questo fantomatico comando? Ma prima di addentrarci in questo, permettimi di presentarmi.
Mi chiamo Lorenzo Neri e sono un informatico.
Questo blog è composto da tutte quelle soluzioni che ho trovato a fronte di un problema nel corso della mia carriera lavorativa e quale miglior modo se non dar vita ad un blog con cui aiutare persone come te che mi stai leggendo?
Incominciamo!
Git blame: cosa fa? Parecchio, per te, per me e per quell’altro.
Diciamo che per capire cosa possa fare “git blame” potremmo riassumerlo in questo:
Git blame è un comando molto utile per fare troubleshooting a più livelli. Principalmente permette di visualizzare i metadati dell’autore di un determinato commit nel tuo repository.
Abbiamo detto “dell’autore” e qui capiamo come mai è utile sì per te, ma anche per me e per quell’altro che magari ha scritto qualcosa di strambo nel repository.
Dunque capiamo da questa premessa che, git blame permette di esaminare un punto preciso della storia del repository e soprattutto capire chi ha contribuito a crearlo.
Se ti sentissi perso in quello che ho detto un paragrafo fa, male forse non ti fa… Esplorare la categoria legata a git a cui ho dato vita nel blog, ma torna qui dopo che te lo spiego con un’altra prospettiva!
Ah, bene! Eccoti, dicevamo…
Dicevamo quindi, che git blame come comando di per sé, se dovessi rispondere davvero alla domanda “che cosa fa” potremmo dire che risponde alle domande cosa, come e perchè il frammento di codice che stai guardando è nel tuo repo.
“Sì, Lorenzo tutto molto bello, ma… “
git blame: come funziona DAVVERO?
Una volta capito cosa faccia, è giusto chiedersi come funziona git blame, dico bene?
Dicevamo prima che permette di capire chi ha modificato cosa e perchè… Diciamo che l’ultimo punto in teoria ce lo permette: dipende se l’autore ha messo un commento di facile lettura!

Ti riporto un esempio di un mio repository:
commit 0c23bfcc0e8dfc8c6a52e60e5191811aa06a835f (HEAD -> main, origin/main)
Author: Lorenzo Neri <test@email.com>
Date: Wed Feb 23 11:56:14 2022 +0100
set update job offers every hour
commit e642374dd965828618a1065ec3c353a7a933d3a6 (tag: v.1.9.2, origin/develop, develop)
Author: Lorenzo Neri <test@email.com>
Date: Mon Jan 31 10:10:12 2022 +0100
reduced timings to 10 minutes and 5 seconds
commit b723f118c41bc26b3ad168f37ca5e5c9a9d45ed9 (tag: v.1.9.1)
Author: Lorenzo Neri <test@email.com>
Date: Wed Dec 22 14:49:47 2021 +0100
exception handling globally covered
E i file che compongono il repository sono i seguenti:
README.md log_file_09-12-2021.txt log_file_29-06-2022.txt
__pycache__ log_file_20-08-2021.txt log_file_31-01-2022.txt
chatbot.py log_file_21-12-2021.txt log_utilies.py log_file_22-10-2021.txt requirements.txt
config.py log_file_22-12-2021.txt subscribe_service.py
log_file_23-02-2022.txt update_recommended_service.json
latest_update_answered.txt log_file_24-10-2021.txt update_service_users.json
latest_update_received.txt log_file_24-11-2021.txt update_telegram_users_service.py
latest_update_subscribes.txt log_file_25-10-2021.txt
log_file_02-11-2021.txt log_file_27-10-2021.txt
Se fossi curioso, si tratta di un chatbot Telegram, ma andiamo avanti.
Ammettiamo che, ad un certo punto voglia capire chi ha scritto il README, parte importante di un repository: che si fa?
Si fa questo:
git blamegit blame README.md
E l’output è il seguente:
a3b8867e (Lorenzo Neri (Istorn) 2021-05-20 09:04:18 +0200 1) # Telegram Chatbot
a3b8867e (Lorenzo Neri (Istorn) 2021-05-20 09:04:18 +0200 2)
a3b8867e (Lorenzo Neri (Istorn) 2021-05-20 09:04:18 +0200 3) ### What am I?
a3b8867e (Lorenzo Neri (Istorn) 2021-05-20 09:04:18 +0200 4)
Ovviamente, fantasia portami via, nel mio caso specifico vedrò solo il mio nome… MA!
Nel caso in cui ci fossero più contributori al repository, vedresti nomi differenti… Ma mica solo quello!
Come nel caso specifico, vedresti per ciascuna modifica effettuata riga per riga che compone il file ciascuna le seguenti informazioni:
- Hash del commit in cui è stata modificata la riga
- Autore: indovina un po’ chi è 😛
- Data, ora e fuso orario in cui è avvenuta la suddetta modifica
- Il numero della riga modificata
- Il contenuto attuale della riga in questione
Insomma, un bell’insieme di informazioni che permettono di capire parecchio su cosa è successo a quel file!