4

私の git リポジトリは破損しており、残念ながらローカルにしか存在しません。

$ git fsck --full
Checking object directories: 100% (256/256), done.
broken link from    tree 54b4ff576b2e39831a298e58a38d91890f622b63
              to    tree d564d0bc3dd917926892c55e3706cc116d5b165e
missing tree d564d0bc3dd917926892c55e3706cc116d5b165e

何をチェックしたかd564d0bc、それはlog/レールプロジェクトの私のフォルダーです。このフォルダーには、*.logファイル (無視される) とファイルのみが含まれ.gitkeepます。

この投稿に記載されている手順に従ってみましたが、Windows 用の GitHub を使用しており、powershell が空のパイプを介して叫んでいます。

どんな助けでも大歓迎です。

更新: プロジェクトを Linux にコピーしたので、powershell コマンドについて心配する必要はありません。私はまだ解決策を見つけていません。

4

1 に答える 1

3

欠落したツリーに .gitkeep ファイルのみが含まれていることが確実であり、その内容がある場合は、欠落したツリーを再作成することができます。

知っておく必要があるのは、一連の低レベルの git コマンドだけですか? 準備はできたか?行け!まず第一に。を使用する必要がありますgit mktree

このコマンドは、stdin データから読み取り、この情報に基づいてツリーを作成します。新しく作成されたツリーのsha1合計を出力します(d564d0bc3dd917926892c55e3706cc116d5b165eと等しいことを確認することを忘れないでください)

次に、この入力の形式を知る必要がありますか?! 形式は次のとおりです。

<mode> SP <type> SP <object> TAB <file>

SP はスペース、TAB はタブです。

  • ファイルモードです
  • git オブジェクト タイプ (ファイルの場合は blob、フォルダーの場合は tree) です。
  • オブジェクトのsha1ハッシュです
  • ファイル名です

例を示しましょう。このフォルダからツリーを作成するには (some_file ファイルは空です)

drwxrwxr-x 2 aleksandr aleksandr 4096 2012-07-25 03:51 .
drwxrwxr-x 4 aleksandr aleksandr 4096 2012-07-25 03:54 ..
-rw-rw-r-- 1 aleksandr aleksandr    0 2012-07-25 03:51 some_file

あなたは走る必要があります

echo -e "100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391\tsome_file" | git mktree

しかし、どうやって目的の sha1 ハッシュを見つけたのでしょうか?! git hash-object救助へ。ただ

git hash-object log/.gitkeep

そのハッシュを決定します。リポジトリを修復するために知っておく必要があるのはそれだけだと思います。

于 2012-07-25T00:13:07.657 に答える