首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git错误“非单调索引”

Git错误“非单调索引”
EN

Stack Overflow用户
提问于 2012-07-22 12:18:04
回答 2查看 7.4K关注 0票数 10

我的git设置有一个我推送到的中央存储库。今天,我决定使用Git Extensions查看中央存储库,它显示存储库没有提交(几乎就像从来没有创建过存储库一样)。在调查这个问题时,我试图克隆repo,它给了我一些从未见过的奇怪的错误:

代码语言:javascript
复制
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index .git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
error: non-monotonic index C:/Temp/N1/Netduino/.git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
fatal: unable to read tree cc90183a1571664f80712c0376f59afeb681303f

我已经搜索了谷歌关于这个问题,在StackOverlow上也有关于这个问题的另一个问题,但它仍然没有回答(this question)。有没有人能阐明这个问题?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-22 15:13:27

(不是一个完整的答案,但至少有一些线索和变通方法)

该错误消息来自sha1_file.c, method check_packed_git_idx()

代码语言:javascript
复制
nr = 0;
index = idx_map;
if (version > 1)
  index += 2; /* skip index header */
for (i = 0; i < 256; i++) {
  uint32_t n = ntohl(index[i]);
  if (n < nr) {
    munmap(idx_map, idx_size);
    return error("non-monotonic index %s", path);
  }
  nr = n;
}

使用ntohl function being

ntohl函数将u_long

/IP网络顺序转换为主机字节顺序(这在英特尔处理器上是小端字节顺序)。

ntohl函数返回netlong参数中提供的值,但字节顺序颠倒。如果netlong已经按主机字节顺序排列,则此函数将颠倒它。字节顺序是否必须颠倒由应用程序决定。

ntohl函数采用TCP/IP网络字节顺序( AF_INETAF_INET6地址族)的32位数字,并返回主机字节顺序的32位数字。

它由以下方式调用:

在SO问题“Is the git binary diff algorithm (delta storage) standardized?”中查看包文件的结构:

第一个也是由builtin/fsck.c调用的,因此您可以尝试使用git fsck --full --progress,以检查您的包文件是否存在本地损坏,或者是否确实存在远程repo问题。

确保您可以在不同的操作系统和/或不同版本的Git上复制该问题。

对于(这里是"Netduino")存储库,通常的变通方法是:

  • 克隆另一个分支,并从损坏的存储库恢复自己的本地修改,添加它们并将其提交回自己的分支,以便使用can them
  • push --force

擦除/重置远程历史记录

票数 5
EN

Stack Overflow用户

发布于 2015-06-08 17:40:06

我在这种非单调错误中搜索信息,找到了这个链接:http://git.661346.n2.nabble.com/Error-non-monotonic-index-after-failed-recursive-quot-sed-quot-command-td7575014.html

TL;DR:删除非单调索引,然后重新索引它。在Linux中,它将是:

代码语言:javascript
复制
> rm .git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.idx
> git index-pack .git/objects/pack/pack-29a18084cf61cd0322a6e9cfd485ce0977348c53.pack 

在这之后,我不得不运行一些git gc --prune=nowgit remote prune origin,但我之前做过一些其他操作,所以我可能破坏了我的repo。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11597738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档