何らかの理由で、そのオブジェクトはオリジンリモートで破損しています。
実行できるこのリポジトリの別のクローンが必要です
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
オリジンがベアリポジトリであるかどうかによって異なります。