Git ошибка при нажатии: объект 15abe3addde5ad5f7d25e8f0f220d2e9faf3cb22: содержит записи, указывающие на null

Я не уверен, как я попал в этот беспорядок. Но я запускаю error: object 15abe3addde5ad5f7d25e8f0f220d2e9faf3cb22:contains entries pointing to null при попытке нажать мой репозиторий на GitHub. Полное нажатие:

[[email protected] puppet]$ git push
Counting objects: 27, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (16/16), 5.67 KiB, done.
Total 16 (delta 6), reused 14 (delta 4)
error: object 15abe3addde5ad5f7d25e8f0f220d2e9faf3cb22:contains entries pointing to null sha1
fatal: Error in object
error: unpack failed: index-pack abnormal exit
To [email protected]:andyshinn/puppet.git
 ! [remote rejected] ganglia -> ganglia (unpacker error)
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to '[email protected]:andyshinn/puppet.git'
Everything up-to-date

Git ls-tree показывает, что мой sudo-модуль является null sha1:

[[email protected] puppet]$ git ls-tree 15abe3addde5ad5f7d25e8f0f220d2e9faf3cb22
...
160000 commit 2cc9d02b3cf27d6a06d85612c03710aa0d90149c  ssh
160000 commit 6961179007dce76d7fb9bd1fc361273acb4129a7  stdlib
160000 commit 0000000000000000000000000000000000000000  sudo
040000 tree 2bd16a8fab440081a876f64d720b5b4d9d119bc9    sysctl
040000 tree 01439b5a20363dccdf3f7103aab701fa7f4b3cd9    template
...

Перечисленные ssh, stdlib и sudo являются подмодулями внешних репозиций git. Папки sysctl и template являются папками в репо.

Я попытался удалить модуль и повторно добавить его и теперь, похоже, не может нажимать фиксацию. Я проделал некоторые поиски и немного нашел ошибку. Как я могу решить эту ошибку?

Ответы

Ответ 1

Я смог наконец решить эту проблему. Вот что я сделал для ее решения:

В статье https://help.github.com/articles/remove-sensitive-data есть заголовок для Очистить файл от вашего репо. Я следую их примеру для удаления Rakefile, но вместо этого использовал папку проблем:

git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch modules/sudo' --prune-empty --tag-name-filter cat -- --all

Поскольку проблемное дерево было папкой, я добавил команду -r в команду. Результатом стала очистка всех коммитов для модификаций sudo и, таким образом, объект 15abe3addde5ad5f7d25e8f0f220d2e9faf3cb22 исчез! После фиксации изменений нажатие было успешным. Я смог позже добавить сломанный модуль без проблем.

Ответ 2

Попробуйте клонировать github repo (голый) в другой локальный каталог. Затем добавьте это как удаленный и попробуйте нажать на этот пульт. Если это не удается, ваша проблема, вероятно, является локальной. (Это было бы моим предположением)

Если это не так, я все равно попытаюсь клонировать ваше "рабочее репо" и попытаюсь отойти от этого клона до локального удаленного, добавленного ранее.

Если это не поможет, вы либо переименуете/создаете резервную копию своего репозитория github, либо создаете новый, либо должны связаться с поддержкой github.