fatal: not a git repository (or any of the parent directories): .git

Soluzione Rapida

Questo errore indica che stai tentando di eseguire un comando Git in una directory che non è tracciata da Git (ovvero, non contiene una cartella .git nascosta). Ecco le tre soluzioni più comuni:

Opzione 1: Inizializza un nuovo repository

Se hai creato una nuova cartella e vuoi iniziare a tracciare i file al suo interno:

# Inizializza un repository vuoto
git init

# Aggiungi tutti i file all'area di staging
git add .

# Esegui il primo commit
git commit -m "Initial commit"

Opzione 2: Clona un repository esistente

Se il tuo obiettivo è scaricare e lavorare su un progetto esistente (es. da GitHub o GitLab), devi usare git clone invece di creare la cartella manualmente:

# Clona il repository (creerà automaticamente la cartella del progetto)
git clone https://github.com/username/repo.git

# IMPORTANTE: Entra nella cartella appena creata
cd repo

Opzione 3: Spostati nella cartella corretta

Se hai già clonato il repository, è molto probabile che tu sia semplicemente nella directory sbagliata (ad esempio, un livello sopra la root del progetto):

# Controlla la directory corrente
pwd

# Spostati nella cartella del progetto
cd nome-del-tuo-progetto

Perché accade questo errore

Git è un sistema di controllo versione distribuito che basa il suo funzionamento su una directory nascosta chiamata .git. Questa cartella contiene:

Quando esegui un comando come git status o git log, Git cerca questa directory .git nella tua posizione corrente. Se non la trova, risale l’albero delle directory (../, ../../, ecc.) fino alla root del file system.

Se Git raggiunge la root senza trovare una cartella .git, lancia l’errore fatal: not a git repository (or any of the parent directories): .git.

Cause comuni

  1. Nuova cartella non inizializzata: Hai creato una cartella con mkdir e vi hai copiato dei file, ma hai dimenticato di lanciare git init.
  2. Posizione errata nel terminale: Sei entrato nel terminale ma non hai navigato (cd) dentro la cartella specifica del progetto.
  3. Download ZIP invece di Clone: Hai scaricato il codice sorgente come archivio .zip da GitHub. Gli archivi ZIP scaricati tramite l’interfaccia web di GitHub non contengono la cartella .git e la cronologia del progetto.
  4. Cancellazione accidentale: La cartella .git è stata rimossa manualmente o da un tool di pulizia disco.
  5. Sottomoduli non inizializzati: Stai lavorando in una sottocartella che dovrebbe essere un submodule, ma non è stata aggiornata.

Spiegazione Dettagliata

Per capire meglio cosa succede, analizziamo il comportamento interno di Git. Quando lanci un comando, Git esegue una “discovery” del repository.

Il processo di discovery

  1. Git controlla la variabile d’ambiente GIT_DIR. Se impostata, usa quella directory.
  2. Se non impostata, cerca una directory .git nella cartella corrente.
  3. Se non la trova, si sposta nella directory padre (cd ..) e ripete la ricerca.
  4. Questo processo continua finché non trova .git o raggiunge / (su Linux/macOS) o la root del drive (es. C:\ su Windows).

Verifica manuale

Puoi simulare questo controllo manualmente per diagnosticare il problema.

Su Linux / macOS:

ls -la
# Cerca una riga come: drwxr-xr-x  8 user user 4096 Jan 1 12:00 .git

Su Windows (PowerShell):

Get-ChildItem -Force
# Cerca una directory chiamata .git con attributo 'Hidden'

Se vedi i tuoi file sorgente (es. index.js, README.md) ma non vedi .git, allora quella cartella non è un repository valido.


Fix on Linux / macOS

Se lavori su sistemi Unix-like, ci sono alcune specificità legate ai permessi e ai percorsi.

1. Controllo dei permessi

Anche se la cartella .git esiste, potresti non avere i permessi di lettura.

ls -ld .git

Se i permessi sono troppo restrittivi (es. appartengono a root e tu sei un utente normale), potresti dover correggere la proprietà:

# Cambia il proprietario della cartella corrente al tuo utente
sudo chown -R $(whoami) .

Nota: Evita di usare sudo git ... a meno che non sia strettamente necessario, poiché può creare file di proprietà di root difficili da gestire in seguito.

2. Verifica del percorso assoluto

A volte, specialmente negli script, potresti credere di essere in una directory diversa. Stampa sempre il percorso completo:

pwd
# Output atteso: /home/user/projects/my-app
# Output errato: /home/user/projects

3. Git Safe Directory

Recenti aggiornamenti di sicurezza di Git impediscono l’esecuzione di comandi in repository posseduti da un altro utente per evitare vulnerabilità. Se ricevi un errore simile a “unsafe repository”, devi aggiungere la directory alla whitelist:

git config --global --add safe.directory /percorso/al/tuo/repo

Fix on Windows

Su Windows, l’errore è spesso causato da come il sistema gestisce i file nascosti o i percorsi di rete.

1. Visualizzare i file nascosti

Per default, Windows nasconde le cartelle che iniziano con un punto. Per essere sicuro che .git esista:

  1. Apri Esplora File.
  2. Vai su Visualizza > Mostra > Elementi nascosti.
  3. Controlla se la cartella .git appare in trasparenza.

2. Problemi con percorsi UNC e Drive Mappati

Git (specialmente Git Bash) a volte ha problemi con i percorsi di rete (es. \\Server\Share\Project).

3. PowerShell vs Git Bash

Se usi PowerShell, assicurati di avere installato posh-git per avere indicazioni visive sullo stato del repository. Se il prompt non mostra il ramo (es. [main]), probabilmente non sei in un repo Git.

# Verifica rapida in PowerShell
Test-Path .git
# Deve restituire 'True'

Common Variations

Potresti incontrare varianti di questo messaggio a seconda del contesto:

fatal: This operation must be run in a work tree

Questo accade se ti trovi fisicamente dentro la cartella .git (es. cd .git) e provi a lanciare comandi che richiedono i file di lavoro (come git status).

fatal: not a git repository: 'path/to/repo'

Accade spesso con i sottomoduli o quando una variabile d’ambiente GIT_DIR punta a una posizione non valida.


FAQ

Q: Ho scaricato lo ZIP da GitHub e ottengo questo errore. Perché? A: La funzione “Download ZIP” di GitHub scarica solo un’istantanea dei file (il codice sorgente) al momento del download. Non include la cartella .git per risparmiare spazio e larghezza di banda. Se vuoi la cronologia Git, devi usare git clone URL_DEL_REPO. Se vuoi solo usare il codice e versionarlo tu stesso, esegui git init nella cartella estratta.

Q: Ho cancellato per sbaglio la cartella .git. Posso recuperarla? A: Purtroppo no. Cancellando .git elimini l’intero database del progetto: cronologia dei commit, branch, tag e configurazioni. I tuoi file di lavoro (il codice che vedi) rimangono intatti, ma per Git è come se fosse un progetto nuovo. Dovrai reinizializzare (git init) o clonare nuovamente dal remote.

Q: Perché succede con i sottomoduli (submodules)? A: I sottomoduli sono puntatori a commit specifici di altri repository. Se cloni senza l’opzione --recursive, le cartelle dei sottomoduli vengono create ma rimangono vuote o prive del file .git (che nei sottomoduli moderni è spesso un file di testo che punta alla directory git reale). Esegui:

git submodule update --init --recursive

Q: Posso eseguire comandi Git fuori da un repository? A: Solo comandi che non dipendono dalla cronologia o dallo stato dei file, come:

Q: VS Code mi dice che non ci sono provider di controllo sorgente attivi. A: Questo è l’equivalente grafico dell’errore. VS Code controlla se la cartella aperta è un repo Git. Se hai aperto una cartella genitore che contiene il progetto in una sottocartella, VS Code potrebbe non rilevarlo automaticamente. Prova ad aprire direttamente la sottocartella del progetto (File > Open Folder).


Ecco altri errori comuni che potresti incontrare gestendo repository e permessi: