1

git rm -rf最初のコミットなしで実行する別の例があります。(役に立たないファイルをたくさん追加したことに気づき、いくつかのフィルターを追加したいと思いました。)

これで、ツリーのない 23000 個のぶら下がりブロブが残っていますが、完全な Git 履歴が残っています!

スクリプトを使用して ( を使用して) blobnames をループしますが、git show 'blobname' > 'filename'これらのファイル名を履歴から blob に関連付けることはできますか?

4

1 に答える 1

2

私が犯した正確な間違いをした/する予定のすべての人のために、これで話は終わりです。

まず、私がしたことの簡単な要約。

  1. 空のリポジトリを作成しました
  2. 多くのファイル/ディレクトリをそれに移動しました
  3. gid add .
  4. 役に立たない/それほど重要ではない/冗長なファイルを大量に追加したことに気づきました
  5. git rm -rf 次に、.gitignoreにいくつかのフィルターを追加することを目的としています
  6. すべてのファイルがなくなったことに気づきました...

私はあらゆる種類のデータ回復ツールを試しました。運がない。私にできる最善のことは、次の手順でした。

  1. すぐに作業ディレクトリを別のボリューム(外部HD)にコピーします。
  2. git fsck --lost-found おそらく--unreachable --cache
    これを使用する.git/lost-found/otherと、元のファイルがすべて(ほとんど?)再作成されたフォルダが作成されますが、ファイル名は含まれません。今問題はファイル名を回復する方法でした。残念ながら、私が復元したファイルはすべてblobであり、ルートはありませんでした。そのため、ディレクトリのツリー構造に関する情報はありませんでした。
  3. 失われたファイル名の完全なリスト(サイズではなく名前のみ)がありましたが、ルートが見つからなかったため、この情報は基本的に役に立ちませんでした。
  4. file一般に、ファイルのタイプ( )を確認するために使用するスクリプトを記述し、file <filename>それに対応する拡張子を付けることができます。ファイルとファイル名を一致させる問題はまだ残っています。
    または、ブルートフォースを使用することもできます。たとえば、PDFを復元するには、復元したファイルを長さで並べ替え、.pdf拡張子を付けて、1つずつ確認しました。実際のPDFであったファイルは何かを示していますが、他のファイルは示していません。
  5. テキストベースのファイル(txt、tex、c、h ..)を復元するために、grepを使用して、特定の(グループの)ファイルに属していることを覚えている文字列を探しました。
  6. 今、私はすべての失われた回復されたファイルでディレクトリを保持します、そして私がそれらの1つを必要とするたびに、私は弾丸4のわずかな変形を使います。

幸運を!

于 2012-09-15T16:48:39.253 に答える