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.
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.
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é.
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.
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.
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.
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.
.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
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)
.gitmodules
en moduleB
.git/modules
et renommez l'ancien dossier du modulemoduleB
et supprimez le dossier des sous-modulesgit submodule sync
et git submodule update
Après cela, je pourrais exécuter à nouveau git status
sans problèmes.
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?
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
.