"Unadd" eine Datei zu svn vor dem Festschreiben

200

Ich war gerade dabei, ein rekursives SVN-Add / Commit durchzuführen, und ein Ordner, der nicht die richtigen Ignoriereigenschaften hatte, wurde aufgenommen. Ich habe ungefähr 100 hochgeladene Binärdateien, die jetzt versioniert sind, aber ich habe mich noch nicht verpflichtet.

Was ist der einfachste Weg, dies rückgängig zu machen, ohne alle Dokumente zu löschen?

Lowgain
quelle

Antworten:

244

Verwenden svn revert --recursive folder_name


Warnung

svn revertist von Natur aus gefährlich, da sein gesamter Zweck darin besteht, Daten wegzuwerfen - nämlich Ihre nicht festgeschriebenen Änderungen. Sobald Sie zurückgesetzt haben, bietet Subversion keine Möglichkeit , diese nicht festgeschriebenen Änderungen zurückzugewinnen.

http://svnbook.red-bean.com/de/1.7/svn.ref.svn.c.revert.html

Julien Lebosquain
quelle
12
Um dies zu erweitern - revertohne eine angegebene Revision werden alle Änderungen rückgängig gemacht, die seit dem letzten Auschecken aufgetreten sind, einschließlich Planungsänderungen zum Hinzufügen / Löschen für die angegebenen Dateien.
Amber
Dabei ist Ordnername der übergeordnete Ordner des Ordners, in dem Sie den Befehl "Hinzufügen" ausgeführt haben
MacGyver
28
Diese Antwort ist gefährlich falsch - sie wird Ihre Änderungen aufheben, indem Sie Ihre lokalen Kopien der Dateien entfernen. Brian Lacys Antwort unten ist viel besser.
Henry Henrinson
6
Leute, dies beantwortet die ursprüngliche Frage: Eine Datei oder ein Ordner, die hinzugefügt und dann zurückgesetzt wurde, wird nur wieder nicht versioniert, ohne gelöscht zu werden. Genau das stellt die Frage. Wenn Sie es für geänderte Dateien verwenden, werden sie natürlich zurückgesetzt: aber das war nicht die Frage. Das ist sogar der sehr spezifische Anwendungsfall, der auf der verlinkten Seite gezeigt wird!
Julien Lebosquain
2
@ JulienLebosquain Ok, ich denke du und ich verstehen diesen Satz anders: ohne alle Dokumente zu löschen . svn revertLöscht leider auch die neu hinzugefügten Änderungen in der Arbeitskopie, indem die neueste HEADVersion wiederhergestellt wird . Ich habe meine Ablehnung entfernt, aber ich halte die Warnung immer noch für wichtig.
Jpaugh
145

svn rm --keep-local folder_name

Hinweis: In svn 1.5.4 löscht svn rm nicht versionierte Dateien, auch wenn --keep-local angegeben ist. Weitere Informationen finden Sie unter http://svn.haxx.se/users/archive-2009-11/0058.shtml .

Brian Lacy
quelle
9
Dies ist gut zu wissen, da Sie damit einfach das "svn add" rückgängig machen können, ohne Änderungen zu verlieren!
Ryan H.
1
Sind Sie sicher, dass SVN 1.5.4 nicht versionierte Dateien löscht? Der Bericht war nicht reproduzierbar und es gibt keine andere E-Mail darüber.
Quentin Pradet
4
Dies ist die bessere Antwort, wenn Sie die Dateien "entpacken" und dennoch behalten möchten. Nach diesem Befehl sind die Dateien weiterhin mit dem? Status.
Robin Zimmermann
32

Versuchen Sie es svn revert filenamemit jeder Datei, die Sie nicht benötigen und die Sie noch nicht festgeschrieben haben. Oder machen Sie es alternativ svn revert -R folderfür den problematischen Ordner und wiederholen Sie den Vorgang mit der korrekten ignorierenden Konfiguration.

Aus der Dokumentation:

 you can undo any scheduling operations:

$ svn add mistake.txt whoops
A         mistake.txt
A         whoops
A         whoops/oopsie.c

$ svn revert mistake.txt whoops
Reverted mistake.txt
Reverted whoops
Bobah
quelle
4
Nein! Zurücksetzen ist unsicher, da es alle lokalen Änderungen
verliert
@jpaugh - Genau das habe ich in der Antwort geschrieben, nein?
Bobah
1
Was das OP verlangte (und was ich erwartet hatte), war ein Befehl, das Hinzufügen rückgängig zu machen, ohne lokale Änderungen zu verlieren. svn revert. Keine der Antworten hier erwähnt die Tatsache, dass lokale Änderungen durch das Zurücksetzen verloren gehen.
Jpaugh
3

Vollständiger Prozess (Unix-SVN-Paket):

Überprüfungsdateien befinden sich nicht in SVN:

> svn st -u folder 
? folder

Fügen Sie alle hinzu (einschließlich ignorierter Dateien):

> svn add folder
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt
A   folder/folderToIgnore
A   folder/folderToIgnore/fileToIgnore1.txt
A   fileToIgnore2.txt

Entfernen Sie das Flag "Hinzufügen" zu allen * Ignorieren * -Dateien:

> cd folder

> svn revert --recursive folderToIgnore
Reverted 'folderToIgnore'
Reverted 'folderToIgnore/fileToIgnore1.txt'


> svn revert fileToIgnore2.txt
Reverted 'fileToIgnore2.txt'

Bearbeiten Sie svn ignorieren auf Ordner

svn propedit svn:ignore .

Fügen Sie zwei einzelne Zeilen mit nur den folgenden hinzu:

folderToIgnore
fileToIgnore2.txt

Überprüfen Sie, welche Dateien hochgeladen und festgeschrieben werden:

> cd ..

> svn st -u
A   folder
A   folder/file1.txt
A   folder/folder2
A   folder/folder2/file2.txt


> svn ci -m "Commit message here"
Schlamm1e
quelle
1
Danke, genau das, was ich brauchte. Es scheint, dass nur der Vorgang 'Hinzufügen' zurückgesetzt wurde, ohne den Dateiinhalt selbst zu berühren. Ich hatte Angst, die lokalen Änderungen zu verlieren, wie in früheren Antworten kommentiert, aber es scheint, dass keine Dateien beschädigt wurden.
Peter M. - steht für Monica
1

Für Dateien - svn revert filename

Für Ordner - svn revert -R folder

Arvind singh
quelle
4
Nein! Zurücksetzen ist unsicher, da es alle lokalen Änderungen
verliert