Почему я получаю «роковое состояние: git status --porcelain fail»? - PullRequest
31 голосов
/ 28 марта 2011

Это огромная боль в заднице. Я получил это несколько раз раньше, и я не понимаю, почему. 5 минут назад репо было в порядке и работало, я перемещаю некоторые файлы (что все круто и все) и мерзко какает свои штаны. Есть идеи, почему это происходит? Как я могу это исправить, кроме клонирования репозитория, перемещения файлов и т. Д ...

Ответы [ 11 ]

44 голосов
/ 28 марта 2011

О боже, я такой неудачник. Похоже, проблема в том, что Flash Builder копирует другие репозитории .git в подпапки. Ответ заключается в удалении всех папок .git, которые не принадлежат репозиторию.

7 голосов
/ 07 января 2012

В случае, если это поможет кому-то еще, я только что столкнулся с той же проблемой и обнаружил, что запуск git init в корне проекта исправил ее.

6 голосов
/ 27 апреля 2017

Я знаю, что это старая ветка, но у меня была та же проблема, и я решил по-другому.git init не работал для меня.Публикация здесь, на случай, если это пригодится кому-либо еще.

Мой репозиторий имеет два подмодуля.После перебазирования я начал получать ошибку fatal: git status --porcelain fail .

Решением было проверить свойство worktree в каждом файле субмодуля config - например, <repository-checkout>/.git/modules/<submodule-name>/config.

У меня был один неверный путь для свойства worktree.Это была ссылка на несуществующую папку, которая была изменена и объединена в master - возможно, из-за ошибки разрешения конфликтов.

6 голосов
/ 29 марта 2012

Я столкнулся с этой ошибкой из-за поврежденного / неправильно инициализированного подмодуля (с собственной подпапкой .git). Я временно удалил папку submodules и использовал git init в корне основного проекта. Исправлена ​​проблема для меня.

3 голосов
/ 20 мая 2014

У меня была такая же проблема. Выполнение git status в каталоге моего корневого проекта привело к следующей ошибке:

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

Запуск git status в соответствующем подмодуле (js/object-subscribe) приведет к этой ошибке:

fatal: This operation must be run in a work tree

Запуск git init в папке этого подмодуля сделал это для меня.

1 голос
/ 28 ноября 2017

В моем случае после перемещения moduleA/mySubmodule на moduleB/mySubmodule с использованием git mv moduleA moduleB с git 2.12.2 я столкнулся с следующей ошибкой:

$ 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

Тогда я сделал следующее (Может быть, не в этом порядке)

  1. Вручную обновить .gitmodules запись до moduleB
  2. Введите .git/modules и переименуйте старую папку модуля
  3. Введите moduleB и удалите папку субмодулей
  4. Выполнить git submodule sync и git submodule update

После этого я мог без проблем запустить git status.

0 голосов
/ 30 марта 2019
git remote -v
#now run the same commands 
git remote add origin remote-repository-url.git
git push origin master

// Это очень хорошо работает

0 голосов
/ 18 декабря 2018

Для меня все было иначе, ни git init не решил проблему, ни worktree не так. Ошибка, которую я имел, была

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

Решение для меня было git gc.

0 голосов
/ 24 ноября 2017

.git - это файл в подмодулях, указывающий на каталог, расположенный в корневом каталоге .git.

В моем случае я монтировал каталог git в Docker и проверял там состояние. Файл .git этого подмодуля содержал абсолютный путь, который был неверен в докере. Я отредактировал этот файл .git на , изменив путь к gitdir на относительный путь .

Git версия: 2.7.4

0 голосов
/ 13 января 2015

Обычно git создает скрытый каталог в корневом каталоге проекта (.git /)

Когда вы работаете с CMS, вы можете установить модули / плагины с каталогом .git / с метаданными git для конкретного модуля / плагина

Если вы не хотите использовать функцию подмодулей в git, самое быстрое решение - удалить все каталоги .git, кроме корневого каталога метаданных git. Если вы сделаете это, git не будет рассматривать эти модули как подмодули проекта.

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

После обнаружения удалите ".git" все каталоги, кроме корневого, но если вы удалили его, снова инициализируйте репо

...