web-dev-qa-db-fra.com

Pourquoi ai-je le statut "fatal: git status --porcelain failed"?

C'est une douleur énorme dans le cul. Je l'ai déjà eu quelques fois auparavant et je ne comprends pas pourquoi. Il y a 5 minutes, le repo fonctionnait bien, je déplaçais des fichiers (ce qui est très cool et tout) et git caca son pantalon. Une idée pourquoi cela se produit? Comment puis-je résoudre ce problème en dehors du clonage du référentiel, du déplacement des fichiers, etc.

31
Ahmed Nuaman

Oh mon Dieu je suis un tel échec Il semblerait que le problème provienne de la copie par Flash Builder de d’autres dépôts .git dans des sous-dossiers. La solution consiste à supprimer tous les dossiers .git autres que ceux du référentiel.

42
Ahmed Nuaman

Au cas où cela aiderait quelqu'un d'autre, je viens de rencontrer le même problème et de constater que l'exécution de git init à la racine du projet l'a corrigé.

7
Jordan Running

J'ai rencontré cette erreur à cause d'un sous-module corrompu/mal initialisé (avec son propre sous-dossier .git). J'ai temporairement supprimé le dossier des sous-modules et utilisé git init à la racine du projet principal. Correction du problème pour moi.

6
Michael Thiel

Je sais que c'est un vieux fil, mais j'ai juste eu le même problème et j'ai fini par résoudre d'une manière différente. Le git init n'a pas fonctionné pour moi. Publier ici, au cas où il serait utile à quelqu'un d'autre.

Mon référentiel a deux sous-modules. Après le changement de base, le message d'erreur fatal: git status --porcelain a échoué .

La solution consistait à vérifier la propriété worktree dans chaque fichier config de sous-module - par exemple. <repository-checkout>/.git/modules/<submodule-name>/config.

J'ai eu un chemin non valide pour la propriété worktree. La liaison avec un dossier non existant a été modifiée et fusionnée avec master - probablement à cause d'une erreur de résolution des conflits.

5
Tom

J'ai eu le même problème. L'exécution de git status dans le répertoire de mon projet racine a généré l'erreur suivante:

fatal: This operation must be run in a work tree
fatal: 'git status --porcelain' failed in submodule js/object-subscribe

L'exécution de git status dans le sous-module concerné (js/object-subscribe) produirait cette erreur:

fatal: This operation must be run in a work tree

Exécuter git init dans le dossier de ce sous-module l'a fait pour moi.

3
Web_Designer

Généralement, git crée un répertoire caché dans le répertoire racine du projet (.git /)

Lorsque vous travaillez sur un CMS, vous pouvez installer des modules/plugins contenant le répertoire .git/avec les métadonnées de git pour le module/plugin spécifique.

Si vous ne souhaitez pas utiliser la fonctionnalité de sous-modules de git, la solution la plus rapide est de supprimer tous les répertoires .git, à l'exception du répertoire de métadonnées git racine. Si vous le faites, git ne considérera pas ces modules comme des sous-modules de projet.

cd /path/to/your/project/code
find ./ | grep ".git/index"

Une fois situé, supprimez ".git" tous les répertoires sauf le répertoire racine, mais si vous le supprimez, initialisez à nouveau votre rapport.

0
yilmi

.git est un fichier dans les sous-modules et pointe vers un répertoire situé dans votre répertoire racine .git.

Dans mon cas, je montais un répertoire git dans docker et vérifiais le statut là-bas. Le fichier .git de ce sous-module contenait un chemin absolu non valide dans docker. J'ai édité ce fichier .git en changer le chemin de gitdir en un chemin relatif

Version Git: 2.7.4

0
Shubham Chaudhary

Dans mon cas, après avoir déplacé moduleA/mySubmodule vers moduleB/mySubmodule en utilisant git mv moduleA moduleB avec git 2.12.2, j'ai rencontré l'erreur suivante:

$ git status
fatal: Could not chdir to '[../]moduleA/mySubmodule': No such file or directory
fatal: 'git status --porcelain' failed in submodule mySubmodule
fatal: 'git status --porcelain' failed in submodule moduleB

Puis j'ai fait la suite (peut-être pas dans cet ordre)

  1. Mettre à jour manuellement l'entrée .gitmodules en moduleB
  2. Entrez .git/modules et renommez l'ancien dossier du module
  3. Entrez moduleB et supprimez le dossier des sous-modules
  4. Exécuter git submodule sync et git submodule update

Après cela, je pourrais exécuter à nouveau git status sans problèmes.

0
Checo R

Je n'ai pas de dossier .git dans mon référentiel, mais chaque fois que je copie mes nouveaux fichiers dans mon dossier pour mettre à jour mon application, des erreurs d'échec de la porcelaine corrompue ont toujours lieu. Je ne comprends pas comment la mise à jour des fichiers pourrait corrompre ceci ou comment le réparer. Quelqu'un at-il un aperçu supplémentaire à ce sujet?

0
rncrtr

Pour moi, c'était différent, ni git init n'a résolu le problème, ni la worktree était fausse. L'erreur que j'ai eu était

fatal: unable to create threaded lstat
fatal: 'git status --porcelain=2' failed in submodule ext/hdf5

La solution pour moi était git gc.

0
Zythos