【问题标题】:Git error index file is too small and the upstream is goneGit错误索引文件太小,上游没了
【发布时间】:2021-03-09 09:47:54
【问题描述】:

我在 Linux 上使用 GitKraken 已有几年了。到目前为止,它工作得很好。但是昨天突然我收到了来自 Gitkraken 的消息,他们不再提供对私人存储库的免费访问!我很着急,需要查看我的隐藏文件和当前文件之间的差异,所以我在终端中运行了一些奇怪的 git 脚本。 我没有成功,所以我获得了 GitKraken 的免费试用版。然后它对我想做的事情工作得很好,而且我能够拉和推一天。但是昨天我提交了一些文件,当我尝试拉取时,它会询问:“我的分支名称”应该从哪个远程/分支推送或拉取? 当我写 origin/"my-branch-name" 并提交它时,它给出了这个错误: 无法读取未定义的属性“fullName”!

我也尝试在终端中使用 git;当我运行 git status 时,我收到以下消息:

error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
On branch dev
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
error: index file .git/objects/pack/pack-a08c14513ad1a7f74b2c0ad8883470516745005c.idx is too small
Your branch is based on 'origin/<my-branch-name>', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

nothing to commit, working tree clean

我不确定我的 git 文件发生了什么,无论是来自 Gitkraken 还是我运行的脚本来查看隐藏文件的差异。 stackoverflow 中有类似的问题,但没有一个有这两个错误: 索引文件太小而且上游没了!

更新:

通过在错误消息中应用建议的“git branch --unset-upstream”,我能够拉取和推送,但我仍然得到所有索引错误。除此之外,如果我尝试使用 GitKraken 进行拉动,它会失败,然后在终端中通过运行 Git status 它会为上游显示相同的消息:

 "Your branch is based on 'origin/<my-branch-name>', but the upstream is gone." 

所以我相信 GitKraken 正在弄乱 git 文件!

【问题讨论】:

    标签: git gitkraken upstream-branch


    【解决方案1】:

    有两个不同的问题:

    1. 名为pack-a08c14513ad1a7f74b2c0ad8883470516745005c.pack 的包文件的包索引文件已损坏。究竟是什么损坏了它以及如何损坏它尚不清楚,但它不再有效并且 Git 无法读取它。

      如果这是存储库的唯一副本,请查找整个计算机文件系统的备份,因为这些备份可能包含存储库损坏之前的良好副本。此外,在尝试任何之前制作损坏的存储库的安全副本(例如,在另一台计算机或 USB 记忆棒或任何可用的备份存储介质上的一个或多个备份副本) > 对其进行修复,以便在修复过程使情况变得更糟时,您可以恢复到受损程度较小的状态。

      幸运的是,包索引文件是 Git 本身从包文件生成的。因此,您可以使用 git index-pack 从包文件重建索引。这假设包文件本身是完整的。

      鉴于(索引)文件已损坏,可能其他文件也已损坏。如果您有此存储库的备份,检查它可能是明智的,并且可能使用它而不是此存储库。在这个存储库上运行git fsck 可能是明智的,同时检查其他文件。

      这个问题产生了您看到的所有以单词error 为前缀的错误,因此如果可以修复它,您将得到一个更简单的错误。

    2. 可能是由于索引损坏,或者作为一个单独的项目,远程跟踪名称refs/remotes/origin/<em>the-name-you-omitted</em> 丢失或无法读取。这产生了upstream is gone 消息。这可能是完全正常的;参见,例如,Upstream gone message on switching back to an empty master branch?

    【讨论】:

    • 你能解释一下“git index-pack”的用法吗?
    • 通过在错误消息中应用建议的“git branch --unset-upstream”,我能够拉和推,但我仍然得到所有索引错误。除此之外,如果我尝试使用 GitKraken 进行拉动,它会失败,并且在终端中通过运行 Git status 它将为上游显示相同的消息。 “您的分支基于 'origin/',但上游已消失。”所以我相信 GitKraken 正在弄乱 git 文件!
    • git index-pack 是 Git 内部程序,用于读取包文件 (*.pack) 并构建相应的索引 (*.idx)。如果一个索引因为“邪恶的程序 X 踩过它一次,我们已经关闭了邪恶的程序 X,所以它不会再次发生”以外的其他原因被破坏,那么修复错误的索引文件的方法是生成一个新的,从零开始的好索引文件,使用git index-pack。不过,我自己从来不需要这样做,所以我只能说“查看文档”。
    • 同时,GitKraken 似乎将上游强行设置为一个不存在的名称。如果您绕过git branch 命令,这很容易做到,大概他们正在这样做。 (我也从未使用过 GitKraken。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2017-12-26
    相关资源
    最近更新 更多