バックアップからいくつかの git ベア リポジトリを復元する必要がありましたが、git (私は wowows XP で msysgit を使用しています) がリポジトリを認識していないことがわかりました。調査の結果、サブフォルダー「heads」および「remotes」とともにフォルダー「refs」が欠落していることが問題のようであることがわかりました。「heads/master」というファイルもありません。再作成する方法はありますか?これらのフォルダ内のデータを復元する必要があります。
2 に答える
すべての参照 (refs フォルダー) を失ったが、実際のデータを失っていない場合は、ダングリング コミット (つまり、他のコミットによって親として参照されていないコミット) を見つけることで、考えられる最後のコミットをすべて見つけることができます。
このコマンドの助けを借りてそれを行うことができます
git fsck --lost-found
これは、すべてのダングリング コミット (およびおそらくその他の有用な情報) を一覧表示します。使用する
git log SHA1SUM
さらに調査する。また、実行することをお勧めします
git fsck
失われた場所のみが参照されるようにします。
UPD:また、refs はpack-refsファイルに配置できます。
もちろん、これらのリポジトリのチェックアウトがある場合、最も簡単な方法は、それらから回復することです。
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