2012-04-13 15 views
50

Quando eseguo git status sul mio repo ottengo fatal: Not a git repository: /my repo/.git/modules/docsgit status ritorna fatale: Non un repository git ma .git esiste e testa ha permessi adeguati

Ho controllato e .git esiste e contiene TESTA con il corretto permessi. Posso eseguire vari altri comandi bene. Se eseguo git gui, si apre bene e elencherà un paio dei file modificati, ma ne mancano molti.

Immagino che possa esserci una specie di corruzione in TESTA, non è sicuro. Qualche idea su come risolvere questo problema senza cancellare l'intero repo?

Aggiornamento: mi sono reso conto che avevo cambiato il nome della directory del repository. La directory a cui viene fatto riferimento nell'errore è il vecchio nome della directory. Quindi il mio repository corrente è a /new dir/.git ma l'errore sta dicendo Not a git repository: /old dir/.git/modules/docs. Quindi forse git è confuso?

+0

Sei repository Git di nidificazione? – nes1983

+0

@ nes1983 Ho diversi sottomoduli, tuttavia questo problema riguarda il repository principale. –

risposta

7

Alla fine ho risolto che il problema era dovuto a un problema con uno dei sottomoduli. La semplice ridenominazione della directory repo ha causato un conflitto con tale sottomodulo. Dopo aver visto la discussione in How can I rename a git repository with submodules? mi sono reso conto che clonare il repository è un modo migliore per andare invece di rinominare la directory e questo ha risolto il problema con il sottomodulo.

+0

Il ripristino da questo problema richiede solo due piccole modifiche manuali per sottomodulo. Per me è più facile che ri-clonare il repository e tutti i suoi sottomoduli. –

+1

@JoshFarneman Come dovrei (principiante) capire cosa hai fatto. i pls forniscono 'clear code' prima e dopo. così si può capire cosa è richiesto. – alex

75

Questi due file contiene assoluta percorso modulo:

{submodule}/.git 
.git/modules/{submodule}/config 

Quindi, se si trasferisce il repo, il percorso assoluto in questi due file non sono validi, e causare l'errore 'non un repository git'. Basta correggere questi file manualmente.

+10

Grazie, questo ha funzionato bene per me. Tuttavia, il secondo percorso era un po 'più breve per me: '.git/modules/{submodule}/config' (sto usando git versione 1.7.9.5 su Ubuntu) –

+1

Mi sono appena trasferito da PC a Mac e ho lo stesso problema . Ho aggiornato il percorso in questi due file e il nuovo percorso è corretto, ma sto ancora diventando "fatale: non un repository git". C'è un file .git in quella posizione, quindi forse mi manca qualcos'altro? –

+3

Solo una nota qui, per me il file di configurazione ha un percorso relativo diverso dal file .git. –

35

Le versioni precedenti di git utilizzavano un percorso assoluto per individuare il gitdir di un sottomodulo. La soluzione è la seguente:

  1. Aggiornamento git su latest version. Alcuni dicono che avrete bisogno almeno della versione 1.7.10. Ho appena risolto il problema con git 1.8.3.
  2. Elimina tutte le cartelle dei sottomoduli interrotti: rm -rf broken_submodule_folder
  3. Aggiorna i moduli registrati: git submodule update. Dovresti vedere i sottomoduli che sono stati estratti.
+0

Grazie! Mi ha salvato un sacco di lavoro, questo! :-) – Potherca

1

stavo affrontando la questione con sottomoduli pure, ma dopo aver analizzato i due file

{} modulo /. Git .git/moduli/sottomoduli/{} modulo/config

I capito che nel mio caso questo non era un problema.

Dopo una piccola ricerca ho scoperto che nel mio caso ho dovuto aggiungere git (comando: module add git) e l'errore è scomparso.

+1

Cos'è questo comando 'module add git' di cui parli? –

4

seguito @ ax003d answer, è possibile sostituire tutti i vecchi sentieri (old/path) con il nuovo percorso (new/path) utilizzando questo comando:

find . -type f \(-name ".git" -o \(-path "*.git/modules/*" -name config \) \) -print0 | xargs -0 sed -i -e "s#old/path#new/path#g" 

si potrebbe desiderare di controllare ciò che i vecchi sentieri assomigliano prima di sostituirli :

find . -type f \(-name ".git" -o \(-path "*.git/modules/*" -name config \) \) -print0 | xargs -0 grep --colour "old/path" 
4

ho risolto questo problema resettare tutti git-sottomoduli con

rm -rf .git/modules 
git submodule update --init 
+0

Wow! Ho appena lavorato per me! Nel mio caso ho fatto accidentalmente un "rm -r" senza corrispondenza con caratteri jolly. Ha cancellato un paio di file dalla root del progetto prima di essere fermato per alcuni prompt. – Sankalp

1

Nel mio caso il problema era che il file .git/HEAD non puntava da nessuna parte, conteneva solo una sequenza di caratteri strani. Ho copiato il contenuto di .git/ORIG_HEAD in .git/HEAD e ha funzionato di nuovo.

Source

Problemi correlati