2016-08-12 3 views
0

Ich habe keine Ahnung, was ich zu meinem git Repo gemacht habe, kann jemand erklären, was schief gelaufen ist? Mein erster Befehl war: git commit -m "another commit" .git push -u origin master was fehlgeschlagen ist. Dann habe ich versucht und Entfernen von Dateien basierend auf einem anderen SO-Post, die mein Problem nicht behoben. An dieser Stelle bin ich nicht einmal sicher, was google, irgendwelche Vorschläge?git blob scheitert an Push

[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) 
$ 

Antwort

0

Nun, Sie haben ein Objekt mit dem SHA-1-Namen 7884ba2578c7535a2e3b70d410f0286bd2e0016f aus Ihrem Repository mit Ihrem zweiten Befehl vernichtet.

Der Rest der Befehle führt nur zufälligen Mist aus dem Internet.

Bitte nehmen Sie meinen Rat: sobald Sie ein vermeintlich ernstes Problem betroffen — wie, dass man durch den ersten Befehl angezeigt Sie — zeigte nur Sicherung das gesamte Repository durch physikalisch Kopieren seine gesamte Verzeichnis woanders — vorzugsweise auf einige andere physische Speicher (weil der H/W-Speicher unter dem Repository möglicherweise fehlschlägt). Nachdem Sie das getan haben, beruhigen Sie sich und greifen Sie nach Hilfe. Bitte versuchen Sie nicht einfach einen zufälligen Mist wie die Ratschläge, den Reflog abzulaufen (völliger Unsinn).

OK, zurück zum Fall. Da Sie dieses Objekt mit einem Atomkern versehen haben, können Sie wahrscheinlich erst fortfahren, wenn Sie es wiederhergestellt haben. Es lohnt sich, dies zu wiederholen: Git speichert alle seine Objekte in einer einzigen Datenbank (unter dem ".git" -Verzeichnis), und diese Datenbank wird von allen "Dingen" geteilt, die sich auf den dort gespeicherten Verlauf beziehen. Also egal, welcher Git-Befehl das Objekt nicht gefunden hat, Sie können sicher sein, dass es nicht in der Datenbank ist und Sie es von woanders beziehen müssen.

Nun gibt es zwei Möglichkeiten:

  1. Das Objekt ein Teil einer Vergangenheit war.

    Wenn ja, besteht die Möglichkeit, dass Sie es aus dem Repository eines Repositorys wiederherstellen können, das an anderer Stelle gehostet wird.

  2. Es war Teil einer jüngeren Geschichte, die nirgendwo hingedrängt wurde.

    Wenn ja, sind Sie ziemlich ratlos, da Sie gerade einen Teil der Objektdatenbank mit Ihrem zweiten Befehl gelöscht haben.

So.Das erste, was zu versuchen, von woanders ein Replikat dieses Repository zu klonen und dann versuchen

$ git cat-file -t 7884ba2578c7535a2e3b70d410f0286bd2e0016f 

laufen, wenn es die Art des Objekts druckt, ist alles gut und man kann es weitergehen erholt, indem Sie

$ git cat-file <type> 7884ba2578c7535a2e3b70d410f0286bd2e0016f > foo 

wo <type> der Art auf der vorhergehenden Stufe erhaltene Objekt ist (es gibt drei von ihnen: blob, tree und commit). Die letzten beiden Wörter verwenden die Shellumleitung, um den Ausgabeinhalt in eine Datei namens "foo" zu stellen.

Danach, packen Sie die Datei „foo“, es in Ihrem Quell-Repository kopieren und ausführen

$ git hash-object -w foo 

dort: Dieser Befehl wird den Inhalt der Datei extrahieren und legen Sie sie in das Repository — in die resultierende Objekt mit dem gegebenen SHA-1-Hash ist im Objektspeicher verfügbar.

Sie können jetzt erneut ausführen.


Doch selbst wenn das funktionieren wird (es sollte) Ich fühle mich immer noch unwohl Sie eine so genannte „Pack-Datei“ entfernt worden ist. Pack-Dateien enthalten in der Regel große Mengen vergangener Geschichte, so dass Sie angeblich ziemlich viel Material entfernt haben.

Um das zu beheben, würde ich versuchen, ein verfügbares Replikat zu klonen und holen Sie dann die nicht gelöschten Commits aus Ihrem Quell-Repository, und dann würde ich anfangen, diesen Klon anstelle des ursprünglichen Repository zu verwenden.

+0

Noch ein Hinweis: Bitte überprüfen Sie das Dateisystem unter dem Repository und versuchen Sie auch, Ihre Hardware zu überprüfen. Es ist ziemlich schwierig, einen zufälligen Datenfehler in einem Git-Repository zu erhalten, ohne dass Grits außerhalb von Git liegt. – kostix

0

Im Allgemeinen Befestigungs gebrochen Repositories ist nicht einfach, aber in diesem Fall, dass Sie einen Klecks fehlen:

missing blob 7884ba2578c7535a2e3b70d410f0286bd2e0016f 

Sie Kopie Objekt versuchen‘.git/Objekte/78/84ba .. . 'aus einem anderen Repository (z. B. aus der Ferne) und fügen Sie es in Ihr lokales Repository ein.

Wenn es nicht ein Fall ist Sie neuen Repository ziehen könnte und erneut vorherigen begehen:

git checkout previous_commit_hash . 

dann Ihre aktuellen Arbeitsfarbraum-Dateien zu kopieren und wieder begehen.