Frage

Was, jemand in meinem Team hat einen "Fehler" gemacht, um mehrere Dateien in der aktuellen Überarbeitung des Team -Repositorys zu löschen. Ist möglich, die aktuelle lokale Version auf die Kopfrevision zu aktualisieren? Wenn ich auf Commit klicke, erkennt Subclipse die fehlenden Dateien nicht, um sie hochzuladen.

Danke im Voraus,
Rayt

War es hilfreich?

Lösung

Oh, für die Liebe von Pete! Die bisherigen Antworten waren bestenfalls irreführend.

Aus Ihrer Frage klingt es so, als hätten Sie so etwas ausprobiert:

svn update -r8
# ok, I can see the deleted file now
svn commit -m "I want r8 to be newest"

Außer das funktioniert nicht. Es gibt keine Änderungen zu verpflichten. Sie können auf ältere Überarbeitungen aktualisieren, können dort jedoch keine Änderungen vornehmen. Sie können die Vergangenheit nicht ändern. Sie können nur eine neue Überarbeitung begehen und den Schaden rückgängig machen.

OK, nehmen wir an, Ihr Repository befindet sich bei SVN: // Repo. Hier ein vereinfachtes Beispiel, in dem der Ordner zwei Dateien enthält, "A" und "B". Nennen wir diese Revision 8 (R8).

trunk    # working copy of svn://repo/trunk
    a
    b

JR Hacker, rutscht aus und löscht versehentlich B:

svn rm b
svn commit -m "oops"

Nennen wir das resultierende Commit R9.

Wenn Sie also das nächste Mal aus dem Repository aktualisieren,

svn update

trunk
    a

B verschwucht! Panik? Nein, dies ist ein Versionskontrollsystem. Alles, was eingecheckt wurde, kann wiederhergestellt werden. Hier sind zwei Möglichkeiten:

Gerade Kopieren Die Datei aus einer älteren Überarbeitung, dh die letzte Überarbeitung, in der sie noch existierte: 8.

svn cp svn://repo/trunk/b@8 .
svn commit -m "restored b from revision 8"

Die allgemeinere Lösung ist die Verwendung a verschmelzen. Sie können diese Technik verwenden, um mehr als nur eine streunende Löschung rückgängig zu machen.

svn merge -r9:8 . .
svn commit -m "reverted the changes made in revision 8"

Der Weg, diese Zusammenführung zu lesen, ist:

Erstens herausfinden, welche Änderungen vorgenommen werden müssen, um von R9 (zurück) zum R8 des Repository -Ordners (SVN: // repo/trunk) zugeordnet zu werden, das dem aktuellen Verzeichnis (das erste "zugeordnet ist."). Führen Sie nun diese Änderungen in der Arbeitskopie im aktuellen Verzeichnis (das zweite ") aus.

Es gibt eine bequemere Syntax, wenn Sie nur eine einzige Änderung zurückkehren:

svn merge -c-8  . . #note the minus sign before the 8

Wenn Sie SVN nicht aus der Befehlszeile verwenden, stecken Sie Ihr Tool ein wenig um, Sie werden sicher etwas finden. Tortoisesvn, zum Beispiel hat die praktische "Rückkehr Änderungen aus dieser Revision", wenn Sie ein Protokoll aus einer Arbeitskopie öffnen.

Andere Tipps

Nehmen Sie eine Kopie der gelöschten in-SVN-Dateien irgendwo von Ihrer Revision (z. B. ein temporärer Ordner auf Ihrem Desktop) und aktualisieren Sie dann (wodurch die Originaldateien gemäß den festgelegten Löschmaßnahmen Ihres Mitarbeiters entfernt werden) und verschieben Sie Ihre Kopien zurück. und verpflichten Sie sie wieder in SVN.

Ich würde Folgendes machen:

Finden Sie die Revisionsnummer vor dem Löschen ... Machen Sie hier einen Svnadmin Dump -r1: [GoodRevisionNumber hier]> Datei.dump.

Erstellen Sie dann ein neues Repository "svnadmin create [repository name] und laden Sie den Dump in das neue Repository. "svnadmin laden [newRepositoryName] <file.dump.

Schauen Sie sich dann diese Revision an und kopieren Sie die Dateien aus der alten Checkout in die neue und starben Sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top