■ space · la sonda del recorrido · fig 1
Git sube por el árbol buscando .git, se detiene en la primera — cinco cosas rompen esa búsqueda, un comando las separa.
Ejecuta git rev-parse --show-toplevel || ls -a — un comando separa las causas antes de que toques nada.
La raíz impresa → estás fuera del repo; cd nada ahí. Sin .git en ls -a → nunca hubo repo: re-clona, no git init.
Error en cada repo de la máquina → un GIT_DIR ; unset GIT_DIR.
01EL RECORRIDO
git busca una entrada, hacia arriba, y se detiene en la primera — la máquina repite la búsqueda
$ git rev-parse --show-toplevel
/home/you/projects/myapp
ENCONTRADO — EL RECORRIDO SE DETUVO EN .GITarreglo — nada que arreglar: el recorrido está sano
INICIO src/api/ · PISOS TOCADOS 2 · VEREDICTO ENCONTRADO
estás aquí → escribiste git pull aquí → el recorrido se detiene aquí, en el primer .git que encuentra
02LA TABLA DE CAUSAS
cinco cosas rompen la búsqueda — empareja tu síntoma con una fila
| síntoma | causa probable | arreglo |
|---|---|---|
error en un proyecto, ls -a no muestra ningún .git | descarga ZIP / archivos copiados | git clone todavía |
| error desde una subcarpeta, la raíz funciona | parado fuera del árbol | cd "$(git rev-parse --show-toplevel)" |
| error en cada directorio, incluso los que funcionaban | GIT_DIR exportado | unset GIT_DIR, purgalo del perfil de shell |
| error dentro de una carpeta de submodule | submodule sin inicializar | git submodule update --init --recursive |
.git es un archivo, el error persiste | puntero worktree/submodule colgado | git worktree repair, si no re-clona |
verificación: git rev-parse --show-toplevel → la ruta raíz del repo, sin error
03LOS DOS PRIMEROS MIENTEN
la tabla arregla síntomas; las dos primeras causas son donde miente la memoria muscular
cd dentro de docs/ o src/api/ y el hábito del shell dice que la raíz está aquí — git sube, no encuentra nada, se detienegit clone siempre crea un subdirectorío con el nombre del repo — el checkout queda un nivel más abajo de donde estás parado.git, sin historial, sin remote.git como «basura oculta» acaba igualgit 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 initno repara un repo — crea uno vacío donde estás parado.
04LAS ÚLTIMAS TRES TE SIGUEN
las tres restantes son ambientales — el error se exporta, cuelga, o nunca nació
env | grep GIT_DIR # GIT_DIR=/some/old/path
unset GIT_DIR
~/.bashrc, ~/.zshrc, o un wrapper de CI lo exporta: purgalo allí.git en un archivo de una línea nombra un directorio en otra parte del disco; el objetivo se movió o se borró → el puntero cuelga y el error persiste aunque .git está justo ahí — git worktree repair reconecta lo que puede, cualquier otra cosa: re-clona.git dentro todavía; git submodule update --init --recursive desde el padre la llenalos extraños sin seguimiento hacen dedo con los árboles copiados — una pasada limpia los resuelve una vez el clone está en su sitio
fin de las cinco causas · nada fetchado · todo local