10

私のgitセットアップには、プッシュ先の中央リポジトリがあります。今日、私は を使用して中央リポジトリを確認することにしましたがGit Extensions、リポジトリにはコミットがないと言われました (まるでリポジトリが作成されていないかのように)。この問題を調査して、リポジトリのクローンを作成しようとしましたが、見たことのない奇妙なエラーが発生しました。

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

この問題について Google を検索しました。また、この問題に関する StackOverlow に関する別の質問もありますが、未回答のままです (この質問)。この問題に光を当てることができる人はいますか? ありがとう

4

2 に答える 2

5

(完全な答えではありませんが、少なくともいくつかの手がかりと回避策)

そのエラーメッセージはsha1_file.c、メソッドcheck_packed_git_idx()

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関数は次のとおりです。

ntohl 関数はu_long、TCP/IP ネットワーク順序からホスト バイト順序 (Intel プロセッサではリトル エンディアン) に変換します。

この関数は、パラメーターで指定された値のバイト順を逆にしてntohl返します。がすでにホストのバイト順になっている場合、この関数はそれを逆にしますnetlongnetlongバイト順を逆にする必要があるかどうかを判断するのは、アプリケーション次第です。

このntohl関数は、TCP/IP ネットワーク バイト オーダー (AF_INETまたはAF_INET6アドレス ファミリ) の 32 ビット数を受け取り、ホスト バイト オーダーの 32 ビット数を返します。

それは以下によって呼び出されます:

SO の質問 " Is the git binary diff algorithm (delta storage) standardized? "でパック ファイルの構造を参照してください。

パックファイル構造

最初のものは によっても呼び出されるbuiltin/fsck.cため、git fsck --full --progress を試して、パック ファイルがローカルで破損しているかどうか、または実際にリモート リポジトリの問題であるかどうかを確認できます。
異なる OS や異なるバージョンの Git で問題を再現できることを確認してください。

GitHub でフォークされているように見える (ここでは「Netduino」) リポジトリの通常の回避策は、次のとおりです。

  • 別のフォークのクローンを作成し、
  • 破損したリポジトリから独自のローカル変更を復元し、それらを追加してコミットします
  • push --force自分のフォークに戻って、リモート履歴を1つずつ消去/リセットするために、正しくパックできます
于 2012-07-22T07:13:27.380 に答える