Réception «fatal: pas un référentiel git» lors d'une tentative d'ajout à distance d'un référentiel Git

440

Je me présente à Git en suivant ce tutoriel:

Tout fonctionne bien jusqu'à la partie où le dépôt est ajouté à ma machine locale:

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

(Après avoir remplacé USERNAME, NFSNSERVER et REPOAME par les noms corrects), je reçois l'erreur:

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

Pouvez-vous m'aider à franchir cette étape?

Corey
la source
2
git initmais assurez-vous également qu'aucun de vos sous-répertoires n'a son propre .gitdossier
James Oravec

Réponses:

909

Avez-vous initié un référentiel Git local, dans lequel cette télécommande est censée être ajoutée?

Votre répertoire local a-t-il un .gitdossier?

Essayez git init.

Assaf Lavie
la source
2
J'avais déjà fait cette étape, mais je devais le refaire après avoir configuré mon compte de parc moteur en installant le parc moteur.
AVProgrammer
3
mon .gitdossier a disparu. Équivaut git inità supprimer le dossier du référentiel, puis git clone .... Tout ce que je dois faire est unpull
Francisco Corrales Morales
3
@FranciscoCorralesMorales si votre .gitdossier a disparu, vous pouvez git initrecommencer pour en créer un nouveau. Vous devrez cependant rajouter une télécommande avant de pouvoir en tirer.
3
J'obtenais la même erreur lors de la soumission des modifications du système local. Git init essayé et cela a fonctionné. Merci!
rbashish
6
le mien a .git et j'avais déjà fait git init mais je reçois une erreurjalal@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

Vous obtiendrez cette erreur si vous essayez d'utiliser une commande Git lorsque votre répertoire de travail actuel ne se trouve pas dans un référentiel Git. C'est parce que, par défaut, Git recherchera un .gitrépertoire de référentiel (à l'intérieur de la racine du projet?), Comme l'a souligné ma réponse à "Git ne montrera le journal que si je suis dans le répertoire du projet" :

Selon la documentation officielle de Linux Kernel Git , GIT_DIR[une variable d'environnement] est-elle définie pour rechercher un .gitrépertoire (dans le répertoire de travail actuel?) Par défaut:

Si la GIT_DIRvariable d'environnement est définie, elle spécifie un chemin à utiliser au lieu de la valeur .gitpar défaut pour la base du référentiel.

Vous devrez soit cdentrer dans le référentiel / la copie de travail, soit vous n'avez pas initialisé ou cloné un référentiel en premier lieu, auquel cas vous devez initialiser un référentiel dans le répertoire où vous souhaitez placer le référentiel:

git init

ou cloner un référentiel

git clone <remote-url>
cd <repository>
Communauté
la source
13
+1 pour avoir mentionné GIT_DIR. dans les hooks dans un dépôt nu, GIT_DIR est défini sur '.' au lieu de «.git».
commonpike
+1 pour git init. Après avoir lu votre réponse, je ce à plusieurs reprises sur les dépôts que je faisais clone, mais ne sont pas reconnus. Donc, il semble être sûr lorsqu'il est exécuté à partir d'une arborescence de répertoires qui est censée être un git repository, a tous les fichiers dans le répertoire git, mais prétend ne pas l'êtrefatal: Not a git repository (or any parent up to mount point
ElderDelp
34

Mon problème était que pour certains hoquets avec mon système d'exploitation, toute commande sur mon référentiel local se terminait par "fatal: Pas un référentiel git (ou aucun des répertoires parents): .git", avec la commande fsck incluse.

Le problème était un fichier HEAD vide .

J'ai pu trouver le nom de la branche sur laquelle j'ai travaillé dans .git / refs / heads, puis j'ai fait ceci:

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

Ça a marché.

Marcin TP Łuczyński
la source
2
Mon fichier HEAD a été corrompu pour une raison quelconque, j'ai donc dû le restaurer et corriger le problème
Steven
1
Tu es un grand copain. J'ai sauvé une tonne de mon temps
Vaibhav Sah
C'était aussi mon problème. Merci
Carlos Rafael Ramirez
3
J'ai fait ouvrir Visual Studio pendant un rebase git et Visual Studio a remarqué un changement de fichier et peu de temps après, j'ai eu un écran bleu de la mort. Après le redémarrage .git / HEAD a été rempli avec NULLS et quand je les ai remplacés par un hachage complet (5621afeffbabed40e3f386676068c45643644b7d) lu quelque part comme .git \ refs \ remotes \ origin \ master, git a recommencé à fonctionner, j'ai également eu besoin de stackoverflow.com/questions / 1115854 /… car cela m'a dit de supprimer .git / index et je devais supprimer .git / index.lock avant de faire la réinitialisation de git. Très bien maintenant
Ivan
1
J'ai presque perdu espoir de reprendre mon travail. Je copie et colle votre solution et c'est magique. Merci
Mukesh Kumar
17

Remarque: cela ne répond pas au problème commun, qui était le problème de l'OP, mais à un problème différent où ce message d'erreur peut apparaître. Je n'avais pas envie de faire une nouvelle question juste pour écrire cette réponse, dites-moi si je devrais le faire à la place: P

Je suis arrivé à la situation, probablement en raison de la corruption d'un crash que j'ai eu, que j'ai eu cette erreur même quand .gitelle existait.

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

Comme je n'avais rien qui devait vraiment être préservé, je suis juste allé de façon factice et j'ai ...

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

Mais ne fonctionne toujours pas, comme par exemple le git logretourne fatal: bad default revision 'HEAD'. Les télécommandes étaient là cependant, donc je l'ai fait git fetch --allet puis juste git reset --hard origin/masterpour me rendre à l'état où le repo était auparavant.

Notez que s'il y a des modifications non validées, vous pouvez les voir avec git status, git diffetc. Puis juste git diff yourfile > patchavant d'exécuter la réinitialisation.

Au moins pour moi reflog ( git reflog) a complètement disparu. Par conséquent, si vous effectuez la réinitialisation et que vous vouliez éviter certains changements, je ne suis pas sûr que vous puissiez les récupérer après la réinitialisation. Donc, assurez-vous que toutes les modifications que vous ne pouvez pas perdre sont sauvegardées, en fin de compte, en copiant simplement le clone avant d'essayer.

Smar
la source
J'ai eu le problème. Et j'ai essayé la façon dont @Smar l'a mentionné, mais le même résultat "fatal ....". Alors, que faire ensuite? toute suggestion?
Chaos
1
Ce problème s'est produit lors de l'utilisation de Visual Studio git initet git fetch --alla résolu le problème.
Morse
7
$ git status
fatal: Not a git repository:

Tapez simplement ce qui suit dans votre shell cmd ou git ou tout autre terminal:

$ git init
der_michael
la source
6

Ce problème m'est apparu après avoir déplacé l'emplacement d'un projet git sur le système de fichiers. Lorsque j'ai exécuté certaines commandes git, l'erreur s'est produite, par exemple:

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

J'ai trouvé dans /home/rospasta/path_old/gitprojecta/.travis/.gitle chemin absolu de l'ancien emplacement du projet a été écrit. La mise à jour manuelle de ce chemin du nouvel emplacement a résolu le problème pour moi.

Donc mon problème peut ou non être un problème git, mais HTH.

IsaacS
la source
5

Au cas où cela aiderait quelqu'un d'autre, j'ai reçu ce message d'erreur après avoir supprimé accidentellement .git / objects /

fatal: Pas un référentiel git (ou aucun des répertoires parents): .git

Le restaurer a résolu le problème.

eduherminio
la source
4

En ligne de commande / CLI, vous obtiendrez cette erreur si votre répertoire actuel n'est PAS le référentiel. Donc, vous devez d'abord CD dans le repo.

Sid Smith
la source
4

Probablement trop tard mais une autre solution qui pourrait aider les futurs visiteurs. Supprimez d'abord l'ancien .gitrépertoire -

rm .git

Ensuite, initialisez à nouveau le dépôt git

git init
kevthanewversi
la source
6
Il convient de noter que cela détruit toutes les métadonnées git telles que les commits. Vous conserverez vos données, mais Git "recommencera à zéro" - ce n'est peut-être pas une bonne chose.
Joseph A.
1
@JosephA .: vous avez raison, c'est sous-optimal. Y a-t-il une meilleure solution que vous pouvez suggérer? J'obtiens l' fatalerreur même si le .gitdossier existe.
Hassan Baig
Mais bon, les commits ne sont-ils pas déjà sur le repo à distance? Ou pour quoi auriez-vous vraiment besoin des commits sur votre HD / localement pour ...? @JosephA.
kevthanewversi
Parce que je pense que vous pouvez toujours faire des choses comme git revert, git reset sans avoir les informations de commit localement ... non? @JosephA.
kevthanewversi
1
C'est tout essuyer! Probablement la pire façon de résoudre ce problème.
Richard Lalancette
4

Il semble que vous n'allez pas dans votre dossier spécifique. Par exemple, si je travaille sur un projet nommé bugsBunny et qu'il est enregistré dans le dossier d: / work: code, vous devez d'abord aller dans ce dossier en utilisant cd d: / work / code / bugsBunny, puis après cela vous pouvez continuer à utiliser vos commandes git.

Vikrant singh
la source
4

Même moi, j'ai eu le même problème. j'ai écrit un script shell qui sauvegardera tous mes codes dans mon dépôt git les jours ouvrables d'une semaine à 17h55 en utilisant crontab. en voyant les journaux de cron j'ai trouvé le problème mentionné ci-dessus.

le problème ci-dessus ne survient que lorsque vous essayez d'exécuter des commandes git à partir d'un répertoire non-gir (c'est-à-dire à partir d'un autre répertoire qui n'est pas la copie de travail). pour résoudre ce problème, ajoutez -C <git dir>dans la commande git que vous exécutez telle qu'elle git statussera git -C /dir/to/git statuset git add -Asera git -C /dir/to/git -A.

Mani
la source
3

Dans mon cas, j'ai utilisé Tortoise SVN et j'ai fait l'erreur d'utiliser également les fonctions Visual Studio GIT en même temps. Cela a fait que Visual Studio verrouille le fichier HEAD dans le dossier .git pour que ni VS ni Tortoise ne puissent accéder au dépôt et j'ai eu l'erreur "fatal: Pas un dépôt git ..." des deux applications.

Solution:

  1. Allez dans le dossier .git et renommez "HEAD.lock" en "HEAD"
  2. Choisissez une application d'administration GIT et ne touchez pas l'autre
Adrian Rosca
la source
3

Pour cela, vous devez entrer une commande qui manque dans les commandes bitbucket

Veuillez essayer git init.

VIKAS KOHLI
la source
2

dans mon cas, j'ai eu le même problème pendant que j'essayais des commandes git (par exemple git status) en utilisant windows cmd. donc ce que je fais est après avoir installé git pour la fenêtre https://windows.github.com/ dans les variables environnementales, ajoutez le chemin de classe du git sur la variable "PATH". habituellement le git sera installé sur C: / user / "username" / appdata / local / git / bin ajoutez ceci sur le PATH dans la variable d'environnement

et encore une chose sur le cmd allez dans votre dépôt git ou cd où votre clone se trouve sur votre fenêtre généralement ils seront stockés sur les documents sous github cd Document / Github / yourproject après que vous puissiez avoir toutes les commandes git

Merci

keyo
la source
2

Accédez à votre dossier source où le dépôt local est stocké, le mien par exemple se trouve dans c: / GitSource, cliquez avec le bouton droit dans le dossier, cliquez sur git bash ici, puis sur git status ....

wesley7
la source
2

GIT_DIR doit être non défini: unset GIT_DIR

okwap
la source
2

Dans mon cas, le fichier .git / HEAD était corrompu (ne contenait que des points). Je l'ai donc édité et remplacé son contenu par:

ref: refs/heads/master

et il a recommencé à fonctionner.

cryss
la source
1

Pour moi, cela était lié à une propriété mal formée sur mon .git/chemin. rootdétenue .git/HEADet .git/indexempêchant l' jenkinsutilisateur d'exécuter le travail.

Hugh Esco
la source
1
Cela ne semble pas reproductible sur la ligne de commande. Après la mise en propriété de .git/HEADet .git/indexà root:root, je suis encore capable d'ajouter Distants sans erreur. Quand je change la propriété de l'ensemble du .gitrépertoire root, je reçois une autre erreur: error: could not lock config file .git/config: Permission denied.
Kyle Strand
1

L'erreur ci-dessous semble que Gits n'a pas trouvé le fichier .git dans le répertoire actuel, ce qui génère un message d'erreur.

Par conséquent, passez du répertoire au répertoire du référentiel où vous avez extrait le code de git, puis exécutez cette commande.

  • $ git checkout
Ajay Kumar
la source
1

Dans mon cas, j'ai trouvé que git dans Windows était devenu sensible à la casse pour la lettre de lecteur à partir d'un certain point.

Après la mise à niveau de git binary dans windows, les commandes cli qui fonctionnaient auparavant s'arrêtaient. par exemple, le chemin dans le script était D : \ bla \ file.txt alors que la commande git acceptait uniquement d : \ bla \ file.txt

ilane
la source
1

git fonctionnait bien pour être et tout à coup, il a commencé à montrer ce fatal: Not a git repository (or any of the parent directories): .gitmessage.

Pour moi, je ne sais pas ce qui était corrompu dans le dossier .git, j'ai fait git clone ** newfolderet copié le dossier .git entier dans mon dossier corrompu / ancien où j'apportais des modifications avant que git ne commence à afficher un message d'erreur.

Tout est revenu à la normale et git a également reconnu mes fichiers modifiés / non mis en scène.

Neel
la source
0

restaurer le .git/ORIG_HEADet les autres fichiers repo racine .git

J'ai eu cette erreur après la restauration de la sauvegarde, apparemment les fichiers contenus dans le répertoire racine .git ne sont pas parvenus à la cible, mais tous les sous-dossiers l'ont fait au début, je pensais que le dépôt était intact.

Je l'ai corrigé en restaurant les fichiers racine.

AndrewD
la source
0

J'ai eu ce problème avec le plugin Jenkins Git après des problèmes d'authentification avec GitLab. Jenkins signalait 'hudson.plugins.git.GitException: [...] stderr: GitLab: Le projet que vous recherchiez est introuvable. fatal: impossible de lire à partir du référentiel distant. '

Cependant, si je faisais un «git clone» ou «git fetch» ​​directement depuis la boîte Jenkins (ligne de commande), cela fonctionnait sans problème.

Le problème a été résolu en supprimant l'intégralité du répertoire / workspace du dossier des travaux Jenkins pour ce travail particulier, par exemple

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

Vraisemblablement, le dossier local .git était périmé / corrompu?

GreensterRox
la source
0

Cela peut également être dû à des autorisations. Vérifiez les autorisations du propriétaire / groupe et assurez-vous que vous disposez des autorisations adéquates pour accéder à ces données. Dans mon cas, je suis tombé sur cette erreur lors de l'exécution de "git status" dans un référentiel dont la propriété était définie sur root: root. L'exécution de "git status" en tant que root a résolu mon problème. Alternativement, si vous ne voulez pas que la propriété de l'utilisateur / groupe soit root: root, indiquez le référentiel à quelque chose auquel vous avez accès.

EliT
la source
0

J'ai eu ce problème et l'ai résolu en ajoutant un fichier README.md

Supun Kavinda
la source