2015-02-09 1 views
10

Ich benutze Ubuntu 14.10 (64bit), git Version 2.1.0. Dies ist ein Repository, das seit mehreren Jahren existiert und in letzter Zeit Probleme verursacht hat.Wie wird mein Git-Repository immer beschädigt?

Manchmal werde ich Filialen wechseln, eine Datei bearbeiten und git status eingeben. Es wird eine Reihe von Dateien als "modifiziert" angezeigt, die sich überhaupt nicht geändert haben.

Wenn ich geben Sie den folgenden:

$ git commit -am "fixed sms message"

ich Fehler wie diese:

error: short read No such file or directory 
error: globalstatic/images/console/avatar_f.gif: failed to insert intodatabase 
error: unable to index file globalstatic/images/console/avatar_f.gif 
fatal: updating files failed 

Wenn ich nichts anderes tun, als die Pfeil nach oben drücken Sie die Taste und drücken Sie die Eingabetaste erneut, I‘ Ich bekomme eine Fehlermeldung über die nächste Datei, die in git status angezeigt wurde, die sich nie wirklich geändert hat. Ich kann dies tun, bis ich die Liste der Dateien in git status, die sich nicht geändert hat, erschöpft haben, und dann wird es korrekt Commit.

meldet, dass es Probleme gefunden hat, aber tatsächlich nichts repariert. Ich muss einfach weitermachen, bis es funktioniert. Hier Ausgabe von git fsck --full, wenn es mir Probleme geben:

Checking object directories: 100% (256/256), done. 
Checking objects: 100% (120625/120625), done. 
dangling tag c7539416829fb0748bc32dda3beb386bac46ea9a 
dangling blob 88a0700db2a75e6ea2b14b9a5af15ece63a80805 
dangling blob f4c664b0044f3d5efff1148717dc68b940e08574 
dangling blob 1bf6185091177fd5a496f5bf031f4d666fec92da 
dangling commit fee4bdcc078789a3745aa1311f128a6b61a81736 
dangling blob 9f14e68da29d49895b1ea303ed33cb390fc56b76 
dangling blob 784a02e974b81f35952fb7c31bf2dcb1a7bfeda8 
dangling blob 9e92d6cf395206152123f9a29edb95652114fd34 
dangling commit 1294f626dcb76cafa560f65792517655fb8a52ae 
dangling blob bceb1adde285e71109723211a1bcb5b0fa126681 
dangling tag 19f4be8e7b53465b13359bc4350b5e87c5942560 
dangling blob 93f96a3b5e995032a50723af796dab9ae36fb974 
dangling blob a25bdfab82fef920935478ee2cefe4dc2e81bbf6 
dangling blob af7187350341f3d7795d35cc1f0cee78eb9f9fdf 
dangling blob e2a1db9e3d3d438c8b03cb6254ca492e505be6f8 

Wenn ich laufe es mehr als einmal, erhalte ich die gleiche Meldung. Nichts verändert sich.

Was ist los?

+0

Zeit, um Ihr Dateisystem und Laufwerk (e) zu überprüfen, denke ich ... Nicht nur das Repo. Vor allem, weil sie sich über Dateien im Arbeitsverzeichnis beschweren (zusätzlich zu den 'git fsck'-Problemen). – twalberg

+0

Auf welcher Art von Dateisystem wird das gespeichert? Wird es von Dropbox oder etwas Ähnlichem synchronisiert? – jszakmeister

+0

Eigentlich sieht es mehr aus, es sieht nicht so aus, als wäre Ihr Repo korrupt. Die herunterhängenden Objekte könnten das Ergebnis von nicht mehr vorhandenen Zweigen oder einer Neuausrichtung Ihrer Arbeit sein. Das Dangling-Tag ist ein wenig verdächtig, aber es könnte daran liegen, dass Sie irgendwo auf dem Weg ein Tag gelöscht haben. Was scheinbar geschieht, ist, dass Git sich nicht zum Repo verpflichtet. Sie können versuchen, 'GIT_TRACE = 2' an den Anfang Ihrer Befehlszeile zu setzen, um ein wenig mehr Informationen darüber zu erhalten, was vor sich geht. – jszakmeister

Antwort

8

Keine Ahnung, was los ist (abgesehen davon, dass das offensichtlich ist, dass etwas dein Git Repo korrumpiert), aber ich weiß, wie ich solche Dinge repariere - ich hoffe, das war eine implizite Frage!

  • Ihre Repo schieben irgendwo (eine lokale bare Repository wird gut)
  • benennen Sie die alte Repository myrepo.broken oder ähnliche
  • Prüfung eine neue Kopie des Repo-out zum vorherigen Platz geschoben
  • Wenn Sie sicher sind Sie nichts verloren haben, löschen Sie die alte Repo

ich ziehe es weit das obige Verfahren mit dem Repo sich futzing. Aber wenn Sie darauf bestehen (und ich würde ein Backup zuerst machen):

  • Beachten Sie die baumelnden Blobs und begeht auch überhaupt kein Problem sein kann - siehe beispielsweise here. Das kurz gelesene Ding sollte nicht passieren.
  • git gc --prune=now wird alle Ihre baumelnden Blobs beschneiden und commits.
  • ist ein Tutorial zur Wartung und Datenwiederherstellung.

Soweit, was besorgt los ist, habe ich Probleme hatte, mit

  • NFS enthält, Home-Verzeichnisse git Bäume, wenn der NFS-Server
  • Groß- und Kleinschreibung Ablagesysteme vertrackt ist
  • Verlustleistung/Systemabsturz verursacht FS Korruption oder geschieht auf halbem Weg durch
  • nicht identifizierte gremlins im System begehen

Es ist einfach genug, das erste und zweite dieser Wiederholungen zu vermeiden, und das dritte ist verständlich, aber das vierte ist eher knifflig. Vermeiden Sie Fütterung nach Mitternacht.

+0

Ich werde es versuchen. Vielen Dank! – synic

+0

Das Schlimmste ist, dass die Gremlins eine sehr wahrscheinliche Ursache sein können. Es können Viren, Scanner, Datei-Backup-Systeme usw. sein, die Dateien im laufenden Betrieb modifizieren, wenn Änderungen vorgenommen werden. Eine Überlegung ist, darüber nachzudenken, was sich kürzlich in der Umgebung geändert hat (hast du ein Update gemacht? Hast du neue Software installiert?) – sjagr