Почему я получаю "git статус - не удалось?"?

Внезапно я получаю эту ошибку git: "git status --porcelain failed" ", когда я выполняю статус git.... что происходит с что?

Ответы

Ответ 1

Это сообщение об ошибке встречается в некоторых похожих вопросах StackOverflow: здесь, здесь. Googling приносит сообщение с рассылкой с этой ошибкой. Никто не дал объяснений, почему это происходит, поэтому я подумал, что добавлю то, что нашел.

Некоторый обзор терминологии, со страницы man git:

GIT КОМАНДЫ

Мы разделим git на команды высокого уровня ( "фарфор" ) и команды низкого уровня ( "сантехника" ).

Из вышеприведенных сообщений будет показано, что при запуске git status он вызывает git status --porcelain. man git-status помогает нам сообщить, что означает флаг --porcelain для:

- фарфор

Дайте результат в формате простого для анализа скриптов. Это похоже на короткий выход, но останется              стабильной версии git и независимо от конфигурации пользователя. Подробнее см. Ниже.

Итак, проблема связана с вызовом git status, который по умолчанию пытается форматировать свой вывод во что-то простое для синтаксического анализа.

Из приведенных выше сообщений, в частности, ответы здесь и списки рассылки, Я бы предположил, что по какой-то причине ваш репозиторий git стал поврежден. Если вы используете подмодули, возможно, один из них поврежден - это актуально, потому что

status run "git status --porcelain" внутри каждого заполненного подмодуль, чтобы увидеть, содержит ли он изменения (link)

если явно не сказано, чтобы этого не делать.

Что касается почему, у вас есть поврежденный репозиторий git? Я не знаю. Несколько других людей в StackOverflow упомянули переписывание, перемещение, замену или вообще поиск в каталогах .git в своих репозиториях. К счастью, у вас есть резервная копия, правда?;)

Ответ 2

В моем случае я переместил подмодуль в другой каталог, и я получил это сообщение об ошибке.

  • После перемещения подмодуля я редактирую .gitsubmodule для соответствия текущему пути подмодуля.
  • Изменить <currentPathOfSubmodule>/.git, gitdir должен соответствовать .git/modules/<pathOfSubmodule>. У него много ../../, вы можете использовать ls для проверки.
  • Получил эту ошибку: -)

    fatal: Не удалось chdir до ../<someWhere>: нет такого файла или каталога
    фатальный: git status --porcelain не удалось в подмодуле

  • Изменить .git/modules/<pathOfSubmodule>/config, worktree должен соответствовать текущему пути подмодуля.

  • Готово.

Ответ 3

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

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

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

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

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