0

バックアップからいくつかの git ベア リポジトリを復元する必要がありましたが、git (私は wowows XP で msysgit を使用しています) がリポジトリを認識していないことがわかりました。調査の結果、サブフォルダー「heads」および「remotes」とともにフォルダー「refs」が欠落していることが問題のようであることがわかりました。「heads/master」というファイルもありません。再作成する方法はありますか?これらのフォルダ内のデータを復元する必要があります。

4

2 に答える 2

4

すべての参照 (refs フォルダー) を失ったが、実際のデータを失っていない場合は、ダングリング コミット (つまり、他のコミットによって親として参照されていないコミット) を見つけることで、考えられる最後のコミットをすべて見つけることができます。

このコマンドの助けを借りてそれを行うことができます

git fsck --lost-found

これは、すべてのダングリング コミット (およびおそらくその他の有用な情報) を一覧表示します。使用する

git log SHA1SUM

さらに調査する。また、実行することをお勧めします

git fsck

失われた場所のみが参照されるようにします。

UPD:また、refs はpack-refsファイルに配置できます。

于 2012-07-22T23:21:53.080 に答える
0

もちろん、これらのリポジトリのチェックアウトがある場合、最も簡単な方法は、それらから回復することです。


refsそれらの名前が指すコミットのSHA1を含むファイルが含まれているだけです。refs/heads/masterおそらく必要なのは、HEADのコミットのSHA1だけです。データは失われていませんが(すべてが含まれていますobjects)、必要なコミットのSHA1を見つけるのは少し難しいかもしれません。

ファイルがある場合はlogs/HEAD、参照が下部にあるはずです(最初のSHA1は最新のコミットの親であり、2番目はそのIDです。マージコミットの場合はさらに多くなる可能性があります)。たとえば、私のリポジトリの1つの最後の行は次のとおりです。

4b2ef6873c3f4c7eaebca06fee4b95ffa9cf58c3 feb84419b6685b920f8a3d61a77e9508ba5dcfe1 Dougal Sutherland <dougal@gmail.com> 1342838724 -0400 pull: Fast-forward

だから、で始まるハッシュfeb84419b6は私が欲しいものです。残念ながら、これらはベア以外のチェックアウトでのみ発生すると思います。

これらのログがない場合、コミットはすべてobjectsディレクトリにあります。最近変更されたものである可能性が高く、たとえばディレクトリls -1t */* | head -10からUnixで入手できます。objectsあなたはカップルを試して、何が起こるかを見ることができます。これから得たら、言う

04/718652eb1f03bb0594cc05665665b749b52a87

次に、を削除して、/使用するハッシュを取得します。

04718652eb1f03bb0594cc05665665b749b52a87
于 2012-07-22T22:48:01.370 に答える