3

git pullコマンドをトリガーしようとすると、次のようなエラーが返されます。

mert@eren-VirtualBox:~/restoranya/restoranya$ git pull オリジン マスター

エラー: オブジェクト ファイル .git/objects/2a/0836034919f0cfe0f8f1ab98037884dd1c93de が空です

致命的: 緩いオブジェクト 2a0836034919f0cfe0f8f1ab98037884dd1c93de (.git/objects/2a/0836034919f0cfe0f8f1ab98037884dd1c93de に保存) が破損しています

mert@eren-VirtualBox:~/restoranya/restoranya$ 致命的: リモート エンドが予期せずハングアップしました

このようなエラーの理由は何ですか? 回復するにはどうすればよいですか?

4

2 に答える 2

2

何らかの理由で、そのオブジェクトはオリジンリモートで破損しています。

実行できるこのリポジトリの別のクローンが必要です

git cat-file -t 2a0836034919f0cfe0f8f1ab98037884dd1c93de

エラーなしで、そのオブジェクトの適切なバージョンをオリジンのオブジェクトデータベースに注入したいとします。

異なるホストに存在し、異なるユーザーが所有している可能性のある複数のクローンについて話しているため、修正の説明は難しい場合があります。以下の手順は、オリジンリポジトリを所有するユーザーとしてオリジンのホストにシェルアクセスできることを前提としています。以下のプロンプトorigin$は、オリジンをホストするマシンで実行されるコマンドを示しています。

元の不良オブジェクトは緩い形式であるため、復元の最後のステップは単純なコピーです。

良いクローンのオブジェクトも緩んでいると仮定して、実行します

origin$ cp /path/to/good-repo/.git/objects/\
2a/0836034919f0cfe0f8f1ab98037884dd1c93de \
/path/to/origin/objects/2a

あなたの起源が裸のリポジトリである場合、または

origin$ cp /path/to/good-repo/.git/objects/\
2a/0836034919f0cfe0f8f1ab98037884dd1c93de \
/path/to/origin/.git/objects/2a

そうでなければ。

良いクローンでこのオブジェクトがパックに保存されている場合は、それを取り出す必要があります。スクラッチ使い捨てクローンでこれを行うことをお勧めします。

origin$ git clone file:///path/to/good-repo /tmp/restore-repo

が別のマシン上にある場合good-repo、クローンURLは異なります。

origin$ git clone user@other-machine:src/foo/.git /tmp/restore-repo

一時リポジトリを保持するディレクトリに移動します。

origin$ cd /tmp/restore-repo

パックファイルをオブジェクトデータベースから移動します。これは、gitがオブジェクトを既に持っていると判断した場合、オブジェクトを解凍しないためです。

origin$ mkdir /tmp/restore-packs
origin$ mv .git/objects/pack/* /tmp/restore-packs

これで、開梱する準備が整いました。

origin$ for pack in /tmp/restore-packs/*.pack; do
  git unpack-objects -r < $pack
done

この-rオプションはgit-unpack-objects、不良オブジェクトに遭遇した場合でも開梱を続行するように指示します。

この時点で/tmp/restore-repo、ルーズオブジェクトとして2a08360…が含まれているはずなので、実行します。

origin$ cp /tmp/restore-repo/.git/objects\
2a/0836034919f0cfe0f8f1ab98037884dd1c93de \
/path/to/origin/objects/2a

また

origin$ cp /tmp/restore-repo/.git/objects\
2a/0836034919f0cfe0f8f1ab98037884dd1c93de \
/path/to/origin/.git/objects/2a

オリジンがベアリポジトリであるかどうかによって異なります。

于 2012-06-14T13:20:26.790 に答える
0

詰め替えてみましたか?

git-repack is used to combine all objects that do not currently reside in a "pack",
into a pack. It can also be used to re-organize existing packs into a single, more
efficient pack.
A pack is a collection of objects, individually compressed, with delta compression 
applied, stored in a single file, with an associated index file. Packs are used 
to reduce the load on mirror systems, backup engines, disk storage, etc.

リポジトリをクリーンアップするためのコマンドがいくつかあります。

$ git-prune
$ git-gc --aggressive
$ git-repack
$ git-repack -a
$ git-prune-packed
于 2012-06-14T10:37:02.113 に答える