Diese Anweisungen sind ein wenig einschüchternd und verwirrend: http://svnbook.red-bean.com/de/1.0/ch04s04.html#svn-ch-4-sect-4.3 . Und sie scheinen auch nicht zu erwähnen, dass es viel einfacher ist, wenn Sie nach dem " svn rm
" [1] noch nicht eingecheckt haben .
Also dachte ich, dies wäre ein guter Ort, um eine einfachere Antwort für diejenigen aufzuzeichnen, die danach googeln.
[1] Für einen SVN-Neuling scheint es, dass " svn rm
" die Datei sofort zerstört. Ich erinnere mich, svn rm
dass ich dachte, das würde es einfach aus der Quellcodeverwaltung entfernen und ausflippen, wenn die Datei selbst tatsächlich verschwand. Eine Unterfrage lautet also: Was ist der richtige Weg, um eine Datei aus der Versionskontrolle zu entfernen, ohne Ihre lokale Kopie tatsächlich zu entfernen?
quelle
svn status | grep "^D" | awk '{print $2}' | xargs svn revert
Antworten:
Wenn du es gerade getan hast
dann können Sie das einfach rückgängig machen
Wenn Sie nach dem "
svn rm
" bereits eingecheckt haben , können Sie das Protokoll (svn log
) anzeigen, die letzte Revision finden, in der die Datei vorhanden war, und sie aus dieser Version abrufen.Eine Möglichkeit, dies zu tun, besteht darin, die alte Version mit der Datei zusammenzuführen. Angenommen, die aktuelle Version ist 123 und die letzte Version mit dieser Datei ist 120, dann gehen Sie folgendermaßen vor:
Vielleicht machen Sie zuerst einen Probelauf, um sicherzustellen, dass nichts funktioniert, was Sie nicht wollen:
Für die Unterfrage, wie man eine Datei aus svn entfernt, ohne die lokale Kopie zu entfernen:
Oder Sie können natürlich einfach vor dem Svn rm'ing in eine temporäre Datei kopieren und dann zurückkopieren:
quelle
svn merge -r120:123 svn_url .
svn revert
funktionierte nicht rekursiv und ich musste tunsvn stat | egrep ^D | cut -c8- | xargs svn revert
aus irgendeinem
-r
grund funktionierte das arg bei mir nicht (svn version 1.6.9). Ich habe es vor und nach dem versuchtsrc
, aber immer wieder die Meldung erhalten, dass die Datei in der aktuellen Version (duh) nicht gefunden wurde. Gleiches gilt für --revision. Die Verwendung der @ style-Syntax hat jedoch funktioniert:quelle
-r
eine Revisionsnummer an (siehe Revisionsspezifizierer ). Die@
Notation ist für Peg Revision (siehe Peg und Operative Revisionen )^/path/from/repo/root
stattdessen verwenden. In meinem Fall habe ich beispielsweise^/trunk/path/to/my/file.js
eine Datei wiederhergestellt, die sich ursprünglichpath/to/my/file.js
in meiner Arbeitskopie befand (dh^/trunk
).Verwenden Sie, um eine Datei zu entfernen, aber in der Arbeitskopie zu belassen
Um eine Datei zurückzugewinnen, nachdem Sie das Entfernen festgeschrieben haben, können Sie entweder den Befehl zum Zusammenführen oder den Befehl zum Kopieren verwenden. Beide behalten den Dateiversionsverlauf bei. Da der Zusammenführungsweg bereits an anderer Stelle beschrieben ist, ist hier der Kopierweg:
quelle
svn info
im Verzeichnis ausgeführt und das Feld "URL" angesehen habe. Dann musste ich auch den "@ 4" -Trick machen, und das "-r4" war nicht notwendig. Interessanterweise wird der Dateiprotokollverlauf mit Ausnahme des Löscheintrags wiederhergestellt!Für TortoiseSVN-Benutzer ist dies sehr einfach über den Repo-Browser möglich. Wechseln Sie im Repo-Browser zur Revision, bevor die Datei gelöscht wurde (Sie können die Version über die Schaltfläche "Revision:" oben rechts ändern):
Sie sollten dann in der Lage sein, die gelöschte Datei an ihrem ursprünglichen Speicherort im Repo-Browser anzuzeigen. Klicken Sie mit der rechten Maustaste darauf und wählen Sie "In Arbeitskopie kopieren ...":
Die Datei wird dann in Ihrer Arbeitskopie wiederhergestellt, bereit zum Festschreiben (als ob svn hinzugefügt worden wäre) und mit intaktem Protokollverlauf.
quelle
So setzen Sie eine gelöschte Datei in SVN zurück Suchen Sie die Revisionsnummer kurz vor dem Löschen (z. B. 341). Setzen Sie dann diese Datei alleine auf diese Versionsnummer zurück.
quelle
Ich habe den Kopiermenüpunkt aus der vorherigen Revision mit Schildkröte verwendet, für mich gearbeitet und den Verlauf beibehalten.
quelle