Ich hatte ein ähnliches Problem. Mein Laptop hat während einer Git-Operation keinen Akku mehr. Boo.
Ich hatte keine Backups. (Hinweis: Ubuntu One ist keine Backup-Lösung für Git. Es überschreibt Ihr vernünftiges Repository hilfreich mit Ihrem beschädigten.)
Wenn dies ein schlechter Weg war, um das Problem zu beheben, hinterlassen Sie bitte einen Kommentar. Es hat jedoch bei mir funktioniert ... zumindest vorübergehend.
Schritt 1: Erstellen Sie eine Sicherungskopie von .git (tatsächlich mache ich dies zwischen jedem Schritt, der etwas ändert, aber mit einem neuen Copy-to-Namen, z. B. .git-old-1, .git-old-2 usw.) ::
cp -a .git .git-old
Schritt 2: Ausführen git fsck --full
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
error: object file .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e is empty
fatal: loose object 8b61d0135d3195966b443f6c73fb68466264c68e (stored in .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e) is corrupt
Schritt 3: Entfernen Sie die leere Datei. Ich dachte mir was zum Teufel; es ist sowieso leer.
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ rm .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e
rm: remove write-protected regular empty file `.git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e'? y
Schritt 3: Führen Sie git fsck
erneut aus. Löschen Sie weiterhin die leeren Dateien. Sie können auch cd
in das .git
Verzeichnis gehen und ausführen find . -type f -empty -delete -print
, um alle leeren Dateien zu entfernen. Irgendwann sagte mir Git, dass es tatsächlich etwas mit den Objektverzeichnissen zu tun habe:
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
Checking object directories: 100% (256/256), done.
error: object file .git/objects/e0/cbccee33aea970f4887194047141f79a363636 is empty
fatal: loose object e0cbccee33aea970f4887194047141f79a363636 (stored in .git/objects/e0/cbccee33aea970f4887194047141f79a363636) is corrupt
Schritt 4: Nachdem ich alle leeren Dateien gelöscht hatte, wurde ich schließlich git fsck
tatsächlich ausgeführt:
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
Checking object directories: 100% (256/256), done.
error: HEAD: invalid sha1 pointer af9fc0c5939eee40f6be2ed66381d74ec2be895f
error: refs/heads/master does not point to a valid object!
error: refs/heads/master.u1conflict does not point to a valid object!
error: 0e31469d372551bb2f51a186fa32795e39f94d5c: invalid sha1 pointer in cache-tree
dangling blob 03511c9868b5dbac4ef1343956776ac508c7c2a2
missing blob 8b61d0135d3195966b443f6c73fb68466264c68e
missing blob e89896b1282fbae6cf046bf21b62dd275aaa32f4
dangling blob dd09f7f1f033632b7ef90876d6802f5b5fede79a
missing blob caab8e3d18f2b8c8947f79af7885cdeeeae192fd
missing blob e4cf65ddf80338d50ecd4abcf1caf1de3127c229
Schritt 5: Versuchen Sie es git reflog
. Scheitern Sie, weil mein KOPF gebrochen ist.
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git reflog
fatal: bad object HEAD
Schritt 6: Google. Finde das . Holen Sie sich manuell die letzten beiden Zeilen des Reflogs:
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ tail -n 2 .git/logs/refs/heads/master
f2d4c4868ec7719317a8fce9dc18c4f2e00ede04 9f0abf890b113a287e10d56b66dbab66adc1662d Nathan VanHoudnos <nathanvan@gmail.com> 1347306977 -0400 commit: up to p. 24, including correcting spelling of my name
9f0abf890b113a287e10d56b66dbab66adc1662d af9fc0c5939eee40f6be2ed66381d74ec2be895f Nathan VanHoudnos <nathanvan@gmail.com> 1347358589 -0400 commit: fixed up to page 28
Schritt 7: Beachten Sie, dass wir aus Schritt 6 erfahren haben, dass der HEAD derzeit auf das allerletzte Commit zeigt. Versuchen wir also, nur das übergeordnete Commit zu betrachten:
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git show 9f0abf890b113a287e10d56b66dbab66adc1662d
commit 9f0abf890b113a287e10d56b66dbab66adc1662d
Author: Nathan VanHoudnos <nathanvan@XXXXXX>
Date: Mon Sep 10 15:56:17 2012 -0400
up to p. 24, including correcting spelling of my name
diff --git a/tex/MCMC-in-IRT.tex b/tex/MCMC-in-IRT.tex
index 86e67a1..b860686 100644
--- a/tex/MCMC-in-IRT.tex
+++ b/tex/MCMC-in-IRT.tex
Es funktionierte!
Schritt 8: Jetzt müssen wir HEAD auf 9f0abf890b113a287e10d56b66dbab66adc1662d zeigen.
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git update-ref HEAD 9f0abf890b113a287e10d56b66dbab66adc1662d
Welches hat sich nicht beschwert.
Schritt 9: Sehen Sie, was fsck sagt:
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
Checking object directories: 100% (256/256), done.
error: refs/heads/master.u1conflict does not point to a valid object!
error: 0e31469d372551bb2f51a186fa32795e39f94d5c: invalid sha1 pointer in cache-tree
dangling blob 03511c9868b5dbac4ef1343956776ac508c7c2a2
missing blob 8b61d0135d3195966b443f6c73fb68466264c68e
missing blob e89896b1282fbae6cf046bf21b62dd275aaa32f4
dangling blob dd09f7f1f033632b7ef90876d6802f5b5fede79a
missing blob caab8e3d18f2b8c8947f79af7885cdeeeae192fd
missing blob e4cf65ddf80338d50ecd4abcf1caf1de3127c229
Schritt 10: Der ungültige sha1-Zeiger im Cache-Baum schien aus einer (jetzt veralteten) Indexdatei ( Quelle ) zu stammen. Also habe ich es getötet und das Repo zurückgesetzt.
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ rm .git/index
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git reset
Unstaged changes after reset:
M tex/MCMC-in-IRT.tex
M tex/recipe-example/build-example-plots.R
M tex/recipe-example/build-failure-plots.R
Schritt 11: Nochmals auf den fsck schauen ...
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git fsck --full
Checking object directories: 100% (256/256), done.
error: refs/heads/master.u1conflict does not point to a valid object!
dangling blob 03511c9868b5dbac4ef1343956776ac508c7c2a2
dangling blob dd09f7f1f033632b7ef90876d6802f5b5fede79a
Die baumelnden Blobs sind keine Fehler . Ich beschäftige mich nicht mit master.u1conflict, und jetzt, wo es funktioniert, möchte ich es nicht mehr anfassen!
Schritt 12: Auf dem Laufenden bleiben mit meinen lokalen Änderungen:
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: tex/MCMC-in-IRT.tex
# modified: tex/recipe-example/build-example-plots.R
# modified: tex/recipe-example/build-failure-plots.R
#
< ... snip ... >
no changes added to commit (use "git add" and/or "git commit -a")
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git commit -a -m "recovering from the git fiasco"
[master 7922876] recovering from the git fiasco
3 files changed, 12 insertions(+), 94 deletions(-)
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git add tex/sept2012_code/example-code-testing.R
nathanvan@nathanvan-N61Jq:~/workspace/mcmc-chapter$ git commit -a -m "adding in the example code"
[master 385c023] adding in the example code
1 file changed, 331 insertions(+)
create mode 100644 tex/sept2012_code/example-code-testing.R
Hoffentlich kann das den Menschen in Zukunft von Nutzen sein. Ich bin froh, dass es funktioniert hat.
git add
Operation gewaltsam getötet ? Ist Ihre Festplatte voll?