推送时出现Git错误:object 15abe3addde5ad5f7d25e8f0f220d2e9faf3cb22:包含指向null的条目

And*_*inn 14 git version-control git-submodules

我不确定自己是如何陷入这个烂摊子的.但是我error: object 15abe3addde5ad5f7d25e8f0f220d2e9faf3cb22:contains entries pointing to null试图将我的存储库推送到GitHub时遇到了.全力推动:

[ashinn@puppet1 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 git@github.com:andyshinn/puppet.git
 ! [remote rejected] ganglia -> ganglia (unpacker error)
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'git@github.com:andyshinn/puppet.git'
Everything up-to-date

Git ls-tree显示我的sudo模块是null sha1:

[ashinn@puppet1 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回购的子模块.文件夹sysctltemplaterepo中的文件夹.

我已经尝试删除模块并重新添加它,现在似乎无法推送任何提交.我做了一些搜索,发现错误很少.我该如何解决这个错误?

And*_*inn 8

我终于能够解决这个问题了.以下是我要解决的问题:

在文章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 modiles的所有提交,因此,对象15abe3addde5ad5f7d25e8f0f220d2e9faf3cb22消失了!提交更改后,推送成功.我以后能够毫无问题地重新添加损坏的模块.