■ 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.
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.
01LA MARCHE
git chasse une entrée, vers le haut, et s'arrête à la première — la machine rejoue la chasse
$ 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ôme | cause probable | réparation |
|---|---|---|
erreur dans un projet, ls -a ne montre pas de .git | téléchargement ZIP / fichiers copiés | git clone encore |
| erreur depuis un sous-dossier, la racine marche | debout hors de l'arbre | cd "$(git rev-parse --show-toplevel)" |
| erreur dans chaque dossier, même ceux qui marchaient | GIT_DIR exporté | unset GIT_DIR, purgez-le du profil de shell |
| erreur à l'intérieur d'un dossier submodule | submodule jamais initialisé | git submodule update --init --recursive |
.git est un fichier, l'erreur persiste | pointeur worktree/submodule pendant | git 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
cd dans docs/ ou src/api/ et l'habitude du shell dit que la racine est ici — git remonte, ne trouve rien, s'arrêtegit 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.git, pas d'historique, pas de remote.git comme « indésirable caché » finit pareilgit rev-parse --show-toplevel # prints the root when one exists
cd "$(git rev-parse --show-toplevel)" # jump there in one step
ls -a # no .git here
git clone <url> # the fix — again, not git init
git initne 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
env | grep GIT_DIR # GIT_DIR=/some/old/path
unset GIT_DIR
~/.bashrc, ~/.zshrc, ou un wrapper CI l'exporte : purgez-le là.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.git dedans encore ; git submodule update --init --recursive depuis le parent le remplitles é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
fin des cinq causes · rien de fetché · tout est local