2016-08-12 11 views
0

私は私のgit repoに何をしたのか分からない、誰かが間違ったことを説明できるか? 私の最初のコマンドは:git commit -m "another commit" .git push -u origin masterでした。私はgit fsck --fullを試して、問題を解決しなかった別のSOの投稿に基づいてファイルを削除しました。この時点で、私はどんな提案をしても、Googleに何を知らないのだろうか?一般的な固定壊れたリポジトリでgit blobがプッシュで失敗する

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git fsck --full 
Checking object directories: 100% (256/256), done. 
error: bad object header1403/1404) 
error: unknown object type -1 at offset 12 in .git/objects/pack/pack-627dd5f8d19a0d3289d2dc5bb37e776aa845ae2f.pack 
error: cannot unpack 7884ba2578c7535a2e3b70d410f0286bd2e0016f from .git/objects/pack/pack-627dd5f8d19a0d3289d2dc5bb37e776aa845ae2f.pack at offset 12 
Checking objects: 100% (1404/1404), done. 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ rm -f .git/objects/pack/pack-627dd5f8d19a0d3289d2dc5bb37e776aa845ae2f.pack 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git fsck --full 
Checking object directories: 100% (256/256), done. 
Checking objects: 100% (1403/1403), done. 
missing blob 7884ba2578c7535a2e3b70d410f0286bd2e0016f 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git commit -m "trying again" . 
error: invalid object 100644 7884ba2578c7535a2e3b70d410f0286bd2e0016f for '3212703ED955F10C7534BE8497B221F4/tester/history/EURUSD1440_0.fxt' 
On branch master 
Your branch is ahead of 'origin/master' by 1 commit. 
    (use "git push" to publish your local commits) 
nothing to commit, working directory clean 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git push -u origin master 
Counting objects: 70, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (65/65), done. 
fatal: unable to read 7884ba2578c7535a2e3b70d410f0286bd2e0016f 
fatal: The remote end hung up unexpectedly 
fatal: The remote end hung up unexpectedly 
fatal: write error: Bad file descriptor 
error: failed to push some refs to 'https://[email protected]/yzpaul/misc-scripts.git' 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git fsck --full 
Checking object directories: 100% (256/256), done. 
Checking objects: 100% (1403/1403), done. 
missing blob 7884ba2578c7535a2e3b70d410f0286bd2e0016f 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git reflog expire --expire=now --all 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git push -u origin master 
Counting objects: 70, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (65/65), done. 
fatal: unable to read 7884ba2578c7535a2e3b70d410f0286bd2e0016f 
fatal: The remote end hung up unexpectedly 
fatal: The remote end hung up unexpectedly 
fatal: write error: Bad file descriptor 
error: failed to push some refs to 'https://[email protected]/yzpaul/misc-scripts.git' 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git hash-object -w 7884ba2578c7535a2e3b70d410f0286bd2e0016f 
fatal: Cannot open '7884ba2578c7535a2e3b70d410f0286bd2e0016f': No such file or directory 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git prune 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git prune --expire=now 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git push -u origin master 
Counting objects: 70, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (65/65), done. 
fatal: unable to read 7884ba2578c7535a2e3b70d410f0286bd2e0016f 
fatal: The remote end hung up unexpectedly 
fatal: The remote end hung up unexpectedly 
fatal: write error: Bad file descriptor 
error: failed to push some refs to 'https://[email protected]/yzpaul/misc-scripts.git' 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git push -u origin master --force 
Counting objects: 70, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (65/65), done. 
fatal: unable to read 7884ba2578c7535a2e3b70d410f0286bd2e0016f 
fatal: The remote end hung up unexpectedly 
fatal: The remote end hung up unexpectedly 
fatal: write error: Bad file descriptor 
error: failed to push some refs to 'https://[email protected]/yzpaul/misc-scripts.git' 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git gc --prune --agressive 
error: unknown option `agressive' 
usage: git gc [<options>] 

    -q, --quiet   suppress progress reporting 
    --prune[=<date>]  prune unreferenced objects 
    --aggressive   be more thorough (increased runtime) 
    --auto    enable auto-gc mode 
    --force    force running gc even if there may be another gc running 


[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ git gc --prune=8-12-2016 
Counting objects: 1418, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (748/748), done. 
fatal: unable to read 7884ba2578c7535a2e3b70d410f0286bd2e0016f 
error: failed to run repack 

[email protected] MINGW64 ~/Desktop/_REPOS/misc (master) 
$ 

答えて

0

もう1つのコマンドで、リポジトリからSHA-1という名前のオブジェクトをヌークしました。7884ba2578c7535a2e3b70d410f0286bd2e0016f

残りのコマンドは、インターネットからランダムなクラップを実行しています。

私のアドバイスを取ってくださいとすぐに物理的にコピーによってあなたが示した最初のコマンドで示されている1 —だけバックアップリポジトリ全体のように、おそらく深刻な問題—を打つようそのディレクトリ全体をどこか別の場所—好ましくは上を他の物理ストレージ(リポジトリ下のH/Wストレージが故障している可能性があるため) これを済ませたら、静かに助けを求めてください。 reflog(完全なナンセンス)を期限切れにするようなアドバイスのようなランダムなクラップスを試してみてください。

OK、ケースに戻します。 あなたはそのオブジェクトを捕まえたので、回復するまで続けることはできません。繰り返す価値があります:Gitはすべてのオブジェクトを単一のデータベース( ".git"ディレクトリの下にあります)に保存します。このデータベースはそこに保存された履歴を参照するすべての "もの"によって共有されます。だからGitコマンドがオブジェクトの位置を特定できなかったとしても、それがデータベースにないことを確かめることができ、別の場所から取得する必要があります。

  1. オブジェクトは、いくつかの過去の歴史の一部だったこと:

    は今、2つの可能性があります。

    「はい」の場合は、他の場所でホストされているリポジトリのレプリカからリカバリできるようになります。

  2. これは、最近プッシュされていない最近の履歴の一部です。

    「はい」の場合は、2番目のコマンドでオブジェクトデータベースの一部を物理的に物理的に削除しただけなので、かなり犠牲になります。

So.しようとする最初の事はどこか別の場所からこのリポジトリのレプリカのクローンを作成し、すべてがうまく、それはあなたにそのオブジェクトの種類を印刷した場合

$ git cat-file -t 7884ba2578c7535a2e3b70d410f0286bd2e0016f 

を実行してみてください、あなたは

を実行して、それを回復進むことができますすることです <type>前のステップで得られたオブジェクトの型である
$ git cat-file <type> 7884ba2578c7535a2e3b70d410f0286bd2e0016f > foo 

は(:blobtreecommitそれらの3つが存在します)。最後の2つの単語はシェルのリダイレクトを使用して、出力内容を "foo"という名前のファイルに置きます。その後

、「foo」をファイルグラブは、あなたのソースリポジトリにコピーして、そこ

$ git hash-object -w foo 

を実行します。このコマンドは、ファイルからコンテンツを抽出し、その結果リポジトリ—にそれを配置します指定されたSHA-1ハッシュを持つオブジェクトをオブジェクトストアで使用できるようにします。

git fsck --fullを再実行できるようになりました。


それでも、それは(それが必要)私はまだあなたは、いわゆる「パックファイル」を削除していたことについて不安を感じて動作する場合でも。パックファイルには通常、過去の履歴が大量に含まれているため、かなり多くのものを削除したはずです。

それを修正するには、私は可能なレプリカのクローンを作成して、そこにあなたのソースリポジトリからunpushedコミットを取得しようとするだろう、と私は、元のリポジトリの代わりにこのクローンを使用することを開始します。

+0

もう1つ注意してください:リポジトリのファイルシステムを確認し、ハードウェアをチェックしてください。 Gitリポジトリで、Gitの外部の理由なしにランダムなデータ破損エラーを取得するのはかなり難しいです。 – kostix

0

は容易ではないが、この場合には、あなたはブロブが欠落しています

missing blob 7884ba2578c7535a2e3b70d410f0286bd2e0016f 

あなたはコピーオブジェクトの.git /オブジェクト//84ba 78を試すことができます。..他のリポジトリ(例えばリモートから)から「。」を選択し、ローカルリポジトリに貼り付けます。

それはあなたが新しいリポジトリに引っ張って、コミット前の再訪可能性がある場合はない場合:

git checkout previous_commit_hash . 

その後に現在の作業スペースのファイルをコピーして、もう一度コミットします。

関連する問題