117 Stimmen

Automatisches Entfernen nicht versionierter Subversion-Dateien

Kennt jemand eine Möglichkeit, alle Dateien in einer Arbeitskopie, die nicht unter Versionskontrolle stehen, rekursiv zu entfernen? (Ich brauche dies, um zuverlässigere Ergebnisse in meinem automatischen VMware-Build zu erhalten).

7 Stimmen

Ich bin ein SVN-Benutzer und habe Git mit SVN verglichen, um herauszufinden, ob ich eventuell umsteigen möchte. Es sieht so aus, als ob dies ein weiteres Beispiel ist, bei dem Git mit seinem Befehl "git clean" glänzt.

3 Stimmen

Oder hg purge --all in Mercurial.

0 Stimmen

Duplikat von stackoverflow.com/questions/2803823/ wo es viel mehr nützliche Aktivitäten gibt.

143voto

Ken Punkte 73996

Das funktioniert bei mir in der Bash:

 svn status | egrep '^\?' | cut -c8- | xargs rm

Seth Reno ist besser:

svn status | grep ^\? | cut -c9- | xargs -d \\n rm -r 

Es behandelt nicht versionierte Ordner und Leerzeichen in Dateinamen

Wie in den Kommentaren unten erwähnt, funktioniert dies nur bei Dateien, die Subversion nicht kennt (status=?). Alles, was Subversion tut wissen (einschließlich ignorierter Dateien/Ordner), werden nicht gelöscht.

Wenn Sie Subversion 1.9 oder höher verwenden, können Sie einfach die svn-Aufräumarbeiten Befehl mit den Optionen --remove-unversioned und --remove-ignored

6 Stimmen

Auch unter Windows in cygwin verwendbar.

0 Stimmen

Ist es sicher, eine SVN-Arbeitskopie zwischen den Windows- und CygWin-Builds von svn zu "teilen" und zu manipulieren?

0 Stimmen

Ich denke, in diesem Beispiel wird die Arbeitskopie nicht manipuliert. Nur der Status wird geändert.

71voto

g . Punkte 7872

Ich bin auf diese Seite gestoßen, als ich dasselbe vorhatte, allerdings nicht für einen automatisierten Build.

Nach etwas längerem Suchen entdeckte ich die ' Erweitertes Kontextmenü ' in TortoiseSVN. Halten Sie die Umschalttaste gedrückt und klicken Sie mit der rechten Maustaste auf die Arbeitskopie. Es gibt nun zusätzliche Optionen im TortoiseSVN Menü, darunter ' Nicht versionierte Objekte löschen... '.

Obwohl es für diese spezielle Frage vielleicht nicht anwendbar ist (d.h. im Kontext eines automatisierten Builds), dachte ich, es könnte für andere hilfreich sein, die dasselbe tun wollen.

0 Stimmen

Großartig! Unter XP funktioniert es nur in der Listenansicht (rechte Seite des Explorers), nicht in der Baumansicht (linke Seite).

0 Stimmen

Fantastisch, schickt es nur in den Papierkorb, wäre schön, wenn man es direkt löschen könnte. Genau das, was ich brauchte.

0 Stimmen

Sie können dies auch auf der Kommandozeile mit TortoiseSVN's TortoiseProc.exe automatisieren: Details in meiner Antwort unten.

35voto

Thomas Watnedal Punkte 4713

Editar:

Subversion 1.9.0 führte eine Option ein, die dies ermöglicht:

svn cleanup --remove-unversioned

Davor benutze ich dieses Python-Skript, um das zu tun:

import os
import re

def removeall(path):
    if not os.path.isdir(path):
        os.remove(path)
        return
    files=os.listdir(path)
    for x in files:
        fullpath=os.path.join(path, x)
        if os.path.isfile(fullpath):
            os.remove(fullpath)
        elif os.path.isdir(fullpath):
            removeall(fullpath)
    os.rmdir(path)

unversionedRex = re.compile('^ ?[\?ID] *[1-9 ]*[a-zA-Z]* +(.*)')
for l in  os.popen('svn status --no-ignore -v').readlines():
    match = unversionedRex.match(l)
    if match: removeall(match.group(1))

Es scheint seine Aufgabe gut zu erfüllen.

1 Stimmen

Funktioniert bei mir immer noch mit Python 2.7.2. Warren P: Können Sie mehr Details zur Verfügung stellen?

0 Stimmen

Ich denke, es war nur ein Problem mit Python 2.6. Funktioniert wieder für mich in 2.7.

1 Stimmen

Ablehnen: Die andere Lösung von unten svn cleanup --remove-unversioned ist besser. Und es ist für Subversion 1.9.0 (diese Version ist von 2015). Sie ist stabil und standardmäßig.

19voto

Martin Punkte 1785

Siehe: svn-clean

0 Stimmen

Vorhanden in cygwin in der subversion-tools Paket.

0 Stimmen

Und in Ubuntu, im gleichen Paket: subversion-tools .

0 Stimmen

Dadurch werden auch die verschachtelten Repositories entfernt.

9voto

Sukesh Nambiar Punkte 91

Wenn Sie in der Windows-Befehlszeile arbeiten,

for /f "tokens=2*" %i in ('svn status ^| find "?"') do del %i

Verbesserte Version:

for /f "usebackq tokens=2*" %i in (`svn status ^| findstr /r "^\?"`) do svn delete --force "%i %j"

Wenn Sie dies in einer Batch-Datei verwenden, müssen Sie die % :

for /f "usebackq tokens=2*" %%i in (`svn status ^| findstr /r "^\?"`) do svn delete --force "%%i %%j"

1 Stimmen

Das hat bei mir irgendwie funktioniert. Schien aber bei einigen nicht versionierten Ordnern zu scheitern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X