kostenloser Webspace werbefrei: lima-city


GIT: Daten gelöscht

lima-cityForumHeim-PCSoftware

  1. Autor dieses Themas

    tillorgias

    tillorgias hat kostenlosen Webspace.

    Hallo ihr,

    ich habe einen Notfall: ich habe GIT (unter Ubuntu 10.04 LTS) ausprobiert, meinen Projektordner für sämtliches Programmierzeugs zur Überwachung hinzugefügt. Da ich sie wieder aus der Kontrolle entfernen wollte, habe ich

    git rm -r .


    verwendet. Dummerweise hat das auch gleich alle meine Daten gelöscht. Allerdings existieren unter /pfad/.git noch Dateien in einer Größe von über 500 MB (könnte etwa der Ursprünglichen Größe entsprechen).

    Jetzt die Frage: kann ich die Daten mit GIT wiederherstellen? (Die FileRecoverys versagen aus irgendwelchen Gründen alle)

    Grüße, Tillorgias

    PS: Es ist wirklich ein Notfall!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. s*********a

    ...]Die FileRecoverys versagen aus irgendwelchen Gründen alle[...

    hast du es schon mit guten Recoverys versucht? (o&o recovery, usw...)

    soweit ich weiß, werden allerdings bei dem Befehl alle files aus dem Index und aus dem working tree gelöscht...
    also weiß ich auch nicht wircklich wie ma ne filewiederherstellung selbst machen kann..leider...

    aber du kannst ja mal bei Firmen wie rsedata oder dergleichen nachfragen, ob das theoretisch möglich ist...
  4. Bitte sage, was du siehst, wenn du "git log" eingibst. Wenn du da zumindest einen commit hast, mache ein "git reset --hard". Das sollte dann den Zustand zu diesem Commit zurückversetzen. Wenn du nach der Datenlöschung nochmals commitet hast, nutze "git checkout {id-des-letzten-commits-wo-noch-nicht-alles-gelöscht-ist}".

    Beitrag zuletzt geändert: 18.6.2010 20:35:46 von nikic
  5. Autor dieses Themas

    tillorgias

    tillorgias hat kostenlosen Webspace.

    Hallo, und danke für die Antworten.

    ich habe es mit o & o Recovery und Recuva versucht. Hat nichts gebracht.

    Ich habe die Daten mit einer "etwas unsauberen" Lösung wiederherstellen können. Ich habe mittels
    git diff > ~/gitrecovery


    die Daten einlesen können und dann ein Programm geschrieben: nicht schön, aber selten (mit Qt 4):

    QString filepath = "/home/tillorgias/gitrecovery";
        QFile file(filepath);
    
        if(!file.open(QIODevice::ReadOnly)){
            qDebug()<<QString("Failed to open %1").arg(file.fileName());
            return;
        }
    
        QString tmp;
        while(!file.atEnd()){
            while(!file.atEnd()){
                tmp = file.readLine();
    
                if(tmp.startsWith("+++")){
                    tmp = tmp.right(tmp.length()-6).trimmed();
                    tmp = "/tmp/recovered/"+tmp;
                    qDebug()<<tmp;
    
                    //tmp contains now the relativ filename
                    break;
                }
            }
    
            QFile f(tmp);
            QString pnp;
            QDir dir;
    
            dir.mkdir(tmp.left(tmp.lastIndexOf("/")));
    
            if(!f.open(QIODevice::WriteOnly)){
                qDebug()<<QString("Failed to open %1").arg(f.fileName());
                return;
            }
    
            //Skip one line
            file.readLine();
    
    
            while(!file.atEnd()){
                pnp = file.readLine();
                if(!pnp.startsWith("+"))
                    break;
                f.write(QVariant(pnp.right(pnp.length()-1)).toByteArray());
            }
    
            f.close();
        }


    Das erstellt alle dateien wieder in /tmp/recovery, von wo aus man sie dann kopieren kann.
    Dieses Programm funktioniert, da git diff dann bei alle Dateien die "fehlenden" zeilen angibt, zum Beispiel so:

    ...
    diff --git a/Crypto/Crypto.pro b/Crypto/Crypto.pro
    new file mode 100644
    index 0000000..8f2b30e
    --- /dev/null
    +++ b/Crypto/Crypto.pro
    @@ -0,0 +1,10 @@
    +# -------------------------------------------------
    +# Project created by QtCreator 2010-02-12T14:19:51
    +# -------------------------------------------------
    +QT -= gui
    +TARGET = Crypto
    +CONFIG += console
    +CONFIG -= app_bundle
    +TEMPLATE = app
    +SOURCES += main.cpp
    +HEADERS += 
    diff --git a/Crypto/Crypto.pro.user b/Crypto/Crypto.pro.user
    new file mode 100644
    index 0000000..999fa4e
    --- /dev/null
    ...


    Ist ein bisschen ausführlicher, in der hoffnung, das jemand, der mit dem gleichen problem zu kämpfen hat, diese lösung verwenden kann.

    Grüße Tillorgias

    *Der thread kann geschlossen werden*
  6. Git benutzt man doch gerade damit sowas eher nicht passieren kann. Hättest du das "git reset --hard" versucht, wärst du zu dem selben Ergebnis gekommen, nur ohne das Script ;)
  7. Autor dieses Themas

    tillorgias

    tillorgias hat kostenlosen Webspace.

    Hi,

    mir ist schon klar, wofür man GIT verwendet. Ich war mir nur ziemlich sicher, dass man die Daten, wenn man sie einmal auch aus GIT entfernt hat, nicht mehr mit den Standardkommandos zurücksetzen kann.

    Trotzdem danke.
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!