Ricezione di "fatale: non un repository git" quando si tenta di aggiungere in remoto un repository Git


439

Mi sto presentando a Git seguendo questo tutorial:

Tutto funziona bene fino alla parte in cui il repository viene aggiunto al mio computer locale:

git remote add nfsn ssh://USERNAME@NFSNSERVER/home/private/git/REPONAME.git

(Dopo aver sostituito USERNAME, NFSNSERVER e REPOAME con i nomi corretti) Ricevo l'errore:

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

Potete aiutarmi a superare questo passaggio?


2
git initma assicurati anche che nessuna delle tue sottodirectory abbia la propria .gitcartella
James Oravec,

Risposte:


908

Hai avviato un repository Git locale, in cui dovrebbe essere aggiunto questo telecomando?

La tua directory locale ha una .gitcartella?

Prova git init.


2
Avevo già fatto questo passaggio, ma ho dovuto farlo di nuovo dopo aver impostato il mio account del cantiere del motore per l'installazione del cantiere del motore.
AVProgrammer

3
la mia .gitcartella non c'è più. È git inituguale a eliminare la cartella del repository e quindi git clone .... Tutto quello che devo fare è unpull
Francisco Corrales Morales,

3
@FranciscoCorralesMorales se la tua .gitcartella è sparita, puoi eseguirla di git initnuovo per crearne una nuova. Tuttavia, dovrai aggiungere nuovamente un telecomando prima di poterlo estrarre.

3
Stavo ottenendo lo stesso errore durante l'invio di modifiche dal sistema locale. Ho provato git init e ha funzionato. Grazie!
rbashish,

6
il mio ha .git e avevo già fatto git init ma ho ricevuto un errorejalal@klein:~/computer_vision/py-faster-rcnn$ git add -A fatal: Not a git repository: caffe-fast-rcnn/../.git/modules/caffe-fast-rcnn
Mona Jalal

85

Questo errore viene visualizzato se si tenta di utilizzare un comando Git quando la directory di lavoro corrente non si trova in un repository Git. Questo perché, per impostazione predefinita, Git cercherà una .gitdirectory del repository (all'interno della radice del progetto?), Come sottolineato dalla mia risposta a "Git non mostrerà il registro se non mi trovo nella directory del progetto" :

Secondo la documentazione ufficiale di Linux Kernel Git , GIT_DIR[una variabile d'ambiente] è impostata per cercare una .gitdirectory (nella directory di lavoro corrente?) Per impostazione predefinita:

Se la GIT_DIRvariabile di ambiente è impostata, specifica un percorso da utilizzare invece del valore predefinito .gitper la base del repository.

O dovrai prima cdaccedere al repository / copia di lavoro, oppure non hai inizializzato o clonato un repository in primo luogo, nel qual caso devi inizializzare un repository nella directory in cui desideri posizionare il repository:

git init

o clonare un repository

git clone <remote-url>
cd <repository>

13
+1 per menzionare GIT_DIR. all'interno di hook in un repository nudo, GIT_DIR è impostato su '.' anziché ".git".
commonpike,

+1 per git init. Dopo aver letto la tua risposta, ho usato questo più volte sul repository che ho fatto clone, ma non sono stati riconosciuti. Quindi, sembra essere sicuro quando eseguito da un albero di directory che dovrebbe essere un git repository, ha tutti i file nella directory git, ma sostiene di non esserlofatal: Not a git repository (or any parent up to mount point
ElderDelp

34

Il mio problema era che per alcuni singhiozzi con il mio sistema operativo qualsiasi comando sul mio repository locale terminava con "fatal: non un repository git (o una delle directory principali): .git", con il comando fsck incluso.

Il problema era un file HEAD vuoto .

Sono stato in grado di trovare il nome della filiale su cui ho lavorato in .git / refs / heads e poi ho fatto questo:

echo 'ref: refs/heads/ML_#94_FILTER_TYPES_AND_SPECIAL_CHARS' > .git/HEAD

Ha funzionato.


2
Il mio file HEAD è stato danneggiato per qualsiasi motivo, quindi ho dovuto ripristinarlo e risolto il problema
Steven

1
Sei un grande amico. Ho risparmiato un sacco di tempo
Vaibhav Sah,

Anche questo era il mio problema. Grazie
Carlos Rafael Ramirez,

3
Ho avuto Visual Studio aperto durante un rebase git e Visual Studio ha notato un cambiamento di file e poco dopo ho avuto una schermata blu della morte. Dopo il riavvio .git / HEAD è stato riempito con NULLS e quando li ho sostituiti con un hash completo (5621afeffbabed40e3f386676068c45643644b7d) letto da qualche parte come .git \ refs \ remotes \ origin \ master, git ha iniziato a funzionare di nuovo, avevo anche bisogno di stackoverflow.com/questions / 1115854 /… poiché questo mi diceva di eliminare .git / index e avevo bisogno di rimuovere .git / index.lock prima di eseguire git reset. Bene ora
Ivan

1
Ho quasi perso la speranza di riavere il mio lavoro. Basta copiare e incollare la tua soluzione e ha fatto magia. Grazie
Mukesh Kumar il

17

NOTA: questo non risponde al problema comune, che era il problema di OP, ma a diversi problemi in cui questo messaggio di errore potrebbe apparire. Non mi andava di fare una nuova domanda solo per scrivere questa risposta, dimmi se invece dovrei farlo: P

Sono arrivato alla situazione, molto probabilmente a causa della corruzione di un certo incidente che ho avuto, che ho riscontrato questo errore anche quando .gitesisteva.

smar@aaeru ~/P/Nominatim> git status
fatal: Not a git repository (or any of the parent directories): .git
smar@aaeru ~/P/Nominatim [128]> ls .git
COMMIT_EDITMSG  config*  FETCH_HEAD  HEAD  index  logs/  modules/  objects/  ORIG_HEAD packed-refs

Dato che non avevo nulla che avesse davvero bisogno di essere preservato, sono andato solo in modo fittizio e ho fatto ...

smar@aaeru ~/P/Nominatim [128]> git init
Reinitialized existing Git repository in /home/smar/Projektit/Nominatim/.git/

Comunque non funziona, come ad esempio git logritorna fatal: bad default revision 'HEAD'. I telecomandi erano lì, quindi l'ho fatto git fetch --alle poi solo git reset --hard origin/masterper arrivare allo stato in cui il repository era in precedenza.

Si noti che se ci sono alcuni cambiamenti non impegnati, è possibile vedere loro con git status, git diffe così via. Quindi appena git diff yourfile > patchprima di eseguire il ripristino.

Almeno per me reflog ( git reflog) è scomparso completamente. Quindi, se esegui il ripristino e ci sono state alcune modifiche che volevi impedire, non sono sicuro che puoi ripristinarle dopo il ripristino. Quindi, assicurati di avere tutte le modifiche di cui non puoi perdere il backup, in ultima analisi semplicemente copiando il clone prima di provare questo.


Ho avuto il problema. E ho provato come menzionato @Smar, ma lo stesso risultato "fatale ....". Quindi, quale sarà il prossimo a fare? qualche suggerimento?
Caos,

1
Questo problema si è verificato durante l'utilizzo di Visual Studio git inite git fetch --allha risolto il problema.
Morse

7
$ git status
fatal: Not a git repository:

Digita quanto segue nella tua shell cmd o git o in qualsiasi altro terminale:

$ git init

6

Questo problema si è verificato dopo che ho spostato la posizione di un progetto git sul filesystem. Quando ho eseguito alcuni comandi git si è verificato l'errore, ad esempio:

$ git status
fatal: Not a git repository: /home/rospasta/path_old/gitprojecta/.git/modules/.travis

Ho trovato nel /home/rospasta/path_old/gitprojecta/.travis/.gitpercorso assoluto della vecchia posizione del progetto è stato scritto. L'aggiornamento manuale di questo percorso della nuova posizione ha risolto il problema per me.

Quindi il mio problema potrebbe essere o meno un problema git, ma HTH.


5

Nel caso in cui aiuti qualcun altro, ho ricevuto questo messaggio di errore dopo aver eliminato accidentalmente .git / objects /

fatale: non un repository git (o una qualsiasi delle directory principali): .git

Il ripristino risolto il problema.


4

Nella riga di comando / CLI, verrà visualizzato questo errore se la directory corrente NON è il repository. Quindi, devi prima inserire il CD nel repository.


4

Probabilmente troppo tardi, ma un'altra soluzione che potrebbe aiutare i futuri visitatori. Prima cancella la vecchia .gitdirectory -

rm .git

Quindi inizializza nuovamente il repository git

git init

6
Va notato che questo distrugge tutti i metadati git come commit. Manterrai i tuoi dati, ma Git "ricomincerà" - questa potrebbe non essere una buona cosa.
Joseph A.

1
@JosephA .: hai ragione, non è ottimale. C'è una soluzione migliore che puoi suggerire? Ottengo l' fatalerrore anche se .gitesiste una cartella.
Hassan Baig,

Ma hey, i commit non sono già sul repository remoto? O di cosa avresti davvero bisogno degli commit sul tuo HD / localmente per ...? @JosephA.
kevthanewversi,

Perché sto ancora pensando di poter fare cose come git revert, git reset senza avere le informazioni di commit a livello locale ... giusto? @JosephA.
kevthanewversi,

1
Questo sta cancellando tutto! Probabilmente il modo peggiore per risolverlo.
Richard Lalancette,

4

Sembra che non andrai nella tua cartella specifica. Ad esempio, se sto lavorando a un progetto chiamato bugsBunny e viene salvato nella cartella d: / work: code, quindi prima devi andare in quella cartella usando cd d: / work / code / bugsBunny, poi dopo che può continuare a usare i comandi git.


4

Anche io ho avuto lo stesso problema. ho scritto uno script di shell che eseguirà il backup di tutti i miei codici sul mio repository git nei giorni lavorativi di una settimana alle 17:55 usando crontab. vedendo i registri di cron ho riscontrato il problema sopra menzionato.

il problema sopra si presenta solo quando si sta tentando di eseguire comandi git da una directory non gir (cioè da un'altra directory che non è la copia di lavoro). per aggiustarlo aggiungi -C <git dir>il comando git che stai eseguendo in modo tale che git statussarà git -C /dir/to/git statuse git add -Asarà git -C /dir/to/git -A.


3

Nel mio caso ho usato Tortoise SVN e ho commesso l'errore di utilizzare contemporaneamente anche le funzioni GIT di Visual Studio. Ciò ha fatto sì che Visual Studio bloccasse il file HEAD nella cartella .git in modo che né VS né Tortoise potessero accedere al repository e ho ricevuto l'errore "fatale: non un repository git ..." da entrambe le applicazioni.

Soluzione:

  1. Vai all'interno della cartella .git e rinomina "HEAD.lock" in "HEAD"
  2. Decidi per un'applicazione di amministrazione GIT e non toccare l'altra

3

Per questo è necessario immettere un comando mancante dai comandi bitbucket

Prova git init.


2

nel mio caso, ho avuto lo stesso problema mentre provo qualsiasi comando git (es. stato git) usando Windows cmd. quindi quello che faccio è dopo aver installato git per la finestra https://windows.github.com/ nelle variabili ambientali, aggiungere il percorso di classe di git sul "PATH" variabile. di solito git verrà installato su C: / user / "username" / appdata / local / git / bin aggiungendolo sul PERCORSO nella variabile ambientale

e un'altra cosa sul cmd vai al tuo repository git o cd dove si trova il tuo clone nella tua finestra di solito saranno memorizzati sui documenti sotto github cd Document / Github / yourproject dopo che puoi avere qualsiasi comando git

grazie


2

Vai alla cartella di origine in cui è archiviato il repository locale, ad esempio il mio si trova in c: / GitSource, fai clic con il pulsante destro del mouse nella cartella, fai clic qui git bash, quindi git status ....


2

GIT_DIR dovrebbe essere non impostato: unset GIT_DIR


2

Nel mio caso il file .git / HEAD era corrotto (conteneva solo punti). Quindi l'ho modificato e sostituito il suo contenuto con:

ref: refs/heads/master

e ha ripreso a funzionare.


1

Per me, questo era legato alla cattiva proprietà nel mio .git/percorso. rootposseduto .git/HEADe .git/index, impedendo jenkinsall'utente di eseguire il lavoro.


1
Questo non sembra essere riproducibile dalla riga di comando. Dopo aver impostato la proprietà di .git/HEADe .git/indexsu root:root, sono ancora in grado di aggiungere telecomandi senza errori. Quando cambio la proprietà di tutta la .gitdirectory root, ottengo un errore diverso: error: could not lock config file .git/config: Permission denied.
Kyle Strand,

1

L'errore di seguito sembra che Gits non abbia trovato il file .git nella directory corrente, quindi genera un messaggio di errore.

Quindi passare alla directory nella directory del repository in cui è stato verificato il codice da git e quindi eseguire questo comando.

  • $ git checkout

1

Nel mio caso ho scoperto che git in Windows è diventato sensibile al maiuscolo / minuscolo per la lettera di unità da un certo punto.

Dopo aver aggiornato git binary in Windows Cli, i comandi che prima funzionavano si sono fermati. ad esempio il percorso nello script era D : \ bla \ file.txt mentre il comando git accettava solo d : \ bla \ file.txt


1

git stava funzionando bene per essere e all'improvviso ha iniziato a mostrare questo fatal: Not a git repository (or any of the parent directories): .gitmessaggio.

Per me non sono sicuro di cosa sia stato corrotto nella cartella .git, l'ho fatto git clone ** newfoldere copiato l'intera cartella .git nella mia cartella corrotta / vecchia in cui stavo apportando modifiche prima che git iniziasse a mostrare il messaggio di errore ..

Tutto è tornato alla normalità e git ha anche riconosciuto i miei file modificati / non messi in scena.


0

ripristinare i .git/ORIG_HEADfile repo .git root e altri

Ho ricevuto questo errore dopo il ripristino dal backup, a quanto pare i file contenuti nella directory root .git non sono arrivati ​​alla destinazione, ma tutte le sottocartelle hanno fatto così all'inizio ho pensato che il repository fosse intatto.

L'ho risolto ripristinando i file root.


0

Ho avuto questo problema con il plugin Jenkins Git dopo problemi di autenticazione con GitLab. Jenkins stava riferendo "hudson.plugins.git.GitException: [...] stderr: GitLab: il progetto che stavi cercando non è stato trovato. fatale: impossibile leggere dal repository remoto. '

Tuttavia, se facessi un 'git clone' o 'git fetch' direttamente dalla casella Jenkins (riga di comando) funzionava senza problemi.

Il problema è stato risolto eliminando l'intera directory / workspace nella cartella dei lavori Jenkins per quel particolare lavoro, ad es

rm -Rf $JENKINS_HOME/jobs/myJenkinsJob/workspace/

Presumibilmente la cartella .git locale era diventata vecchia / danneggiata?


0

Ciò può anche essere dovuto alle autorizzazioni. Controlla le autorizzazioni del proprietario / gruppo e assicurati di disporre delle autorizzazioni adeguate per accedere a tali dati. Nel mio caso, ho riscontrato questo errore durante l'esecuzione di "stato git" in un repository la cui proprietà era impostata su root: root. L'esecuzione di "git status" come root ha risolto il mio problema. In alternativa, se non vuoi che la proprietà dell'utente / del gruppo sia root: root, chown il repository a qualcosa a cui hai accesso.



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.