■ space · la sonde de la marche · fig 1

Git remonte l'arbre à la chasse à .git, s'arrête à la première — cinq choses brisent cette chasse, une commande les départage.

■ la réponse d'abord

Lancez git rev-parse --show-toplevel || ls -a — une commande départage les causes avant que vous ne touchiez à quoi que ce soit.

La racine imprimée → vous êtes debout hors du dépôt ; cd rien là. Pas de .git dans ls -a → il n'y a jamais eu de dépôt : re-clônez, ne git init.

Erreur dans chaque dépôt de la machine → un GIT_DIR ; unset GIT_DIR.

5causes derrière une seule ligne fatal
1commande les départage
20minutes que coûte le pari du dossier-supérieur

01LA MARCHE

git chasse une entrée, vers le haut, et s'arrête à la première — la machine rejoue la chasse

FIG 1 · LA SONDE DE LA MARCHEtouches 1–6 — ou les boutons
cible du worktreedéplacée · suppriméesrc/api/F1myapp/F2projects/F3home/you/F4.git.gitGIT_DIR=/some/old/pathVOUSLA MARCHE← vous avez tapé git pull ici
la sonde
$ git rev-parse --show-toplevel
/home/you/projects/myapp

TROUVÉ — LA MARCHE S'EST ARRÊTÉE AU .GITréparation — rien à réparer : la marche est saine

DÉPART src/api/ · ÉTAGES FRAPPÉS 2 · VERDICT TROUVÉ

vous êtes ici → vous avez tapé git pull ici → la marche s'arrête ici, au premier .git qu'elle rencontre

02LA TABLE DES CAUSES

cinq choses brisent la chasse — accordez votre symptôme à une ligne

symptômecause probableréparation
erreur dans un projet, ls -a ne montre pas de .gittéléchargement ZIP / fichiers copiésgit clone encore
erreur depuis un sous-dossier, la racine marchedebout hors de l'arbrecd "$(git rev-parse --show-toplevel)"
erreur dans chaque dossier, même ceux qui marchaientGIT_DIR exportéunset GIT_DIR, purgez-le du profil de shell
erreur à l'intérieur d'un dossier submodulesubmodule jamais initialiségit submodule update --init --recursive
.git est un fichier, l'erreur persistepointeur worktree/submodule pendantgit worktree repair, sinon re-clônez

vérification : git rev-parse --show-toplevel → le chemin racine du dépôt, pas d'erreur

03LES DEUX PREMIÈRES MENTENT

la table répare les symptômes ; les deux premières causes sont là où la mémoire musculaire ment

la forme du sous-dossier—vous avez cd dans docs/ ou src/api/ et l'habitude du shell dit que la racine est ici — git remonte, ne trouve rien, s'arrête
la forme du clone—git clone crée toujours un sous-dossier nommé d'après le dépôt — le checkout se tient un niveau plus bas que là où vous êtes debout
la forme du zip—Code → Download ZIP n'expédie que la photo de la source : pas de .git, pas d'historique, pas de remote
la forme copiée—fichiers copiés sans le dossier caché — un outil de nettoyage qui a supprimé .git comme « indésirable caché » finit pareil
sautez à la racine — marche depuis toute profondeur à l'intérieur du dépôt
git rev-parse --show-toplevel   # prints the root when one exists
cd "$(git rev-parse --show-toplevel)"   # jump there in one step
il n'y a jamais eu de dépôt — récupérez l'historique
ls -a   # no .git here
git clone <url>   # the fix — again, not git init

git init ne répare pas un dépôt — il en crée un vide là où vous êtes debout.

04LES TROIS DERNIÈRES VOUS SUIVENT

les trois restantes sont environnementales — l'erreur s'exporte, pend, ou n'est jamais née

le signe : git marchait ici il y a une heure
env | grep GIT_DIR     # GIT_DIR=/some/old/path
unset GIT_DIR
GIT_DIR exporté—un chemin fixe remplace la découverte, si bien que chaque dossier « ordinaire » devient « pas un dépôt » — si ça revient chaque matin, une ligne dans ~/.bashrc, ~/.zshrc, ou un wrapper CI l'exporte : purgez-le là
pointeur mort—.git en fichier d'une ligne nomme un répertoire ailleurs sur le disque ; la cible déplacée ou supprimée → le pointeur pend et l'erreur persiste même si .git est juste là — git worktree repair rebrace ce qu'il peut, sinon : re-clônez
submodule—le dossier existe dans l'arbre du dépôt parent mais n'a jamais été initialisé — il n'y a pas de .git dedans encore ; git submodule update --init --recursive depuis le parent le remplit

les étrangers non suivis font de l'auto-stop avec les arbres copiés — une passe propre les règle une fois le clone en place

■ cachet d'honnêteté Testé sur : git 2.4x · bash + zsh · submodules et worktrees. Première publication 2026-09-28. La recherche remontante, la dérogation GIT_DIR et le fichier de pointeur worktree sont le comportement de découverte documenté de git ; les cinq causes sont l'ensemble complet derrière cette erreur, saisi depuis des dépôts qui sont revenus.

fin des cinq causes · rien de fetché · tout est local