Kennt jemand eine Möglichkeit, alle Dateien in einer Arbeitskopie, die nicht der Versionskontrolle unterliegen, rekursiv zu entfernen? (Ich benötige dies, um zuverlässigere Ergebnisse in meiner automatisch erstellten VMware zu erzielen.)
svn
build-automation
Stefan Schultze
quelle
quelle
hg purge --all
in Mercurial.Antworten:
Bearbeiten:
Subversion 1.9.0 führte eine Option ein, um dies zu tun:
Vorher benutze ich dieses Python-Skript, um das zu tun:
Es scheint den Job ziemlich gut zu machen.
quelle
svn cleanup --remove-unversioned
ist besser. Und es ist für Subversion 1.9.0 (diese Version ist von 2015). Es ist stabil und standardisiert.das funktioniert bei mir in bash:
Seth Renos ist besser:
Es behandelt nicht versionierte Ordner und Leerzeichen in Dateinamen
Wie in den Kommentaren unten angegeben, funktioniert dies nur bei Dateien, von denen Subversion nichts weiß (status =?). Alles , was Subversion nicht kennen (einschließlich Ignoriert Dateien / Ordner) werden nicht gelöscht.
Wenn Sie Subversion 1.9 oder höher verwenden, können Sie einfach den Befehl svn cleanup mit den Optionen --remove-unversioned und --remove-ignore verwenden
quelle
svn status | grep "^?" | awk '{print $2}' | xargs -d \\n rm -r
Ich bin auf diese Seite gestoßen, als ich versucht habe, dasselbe zu tun, allerdings nicht für einen automatisierten Build.
Nach einigem Hin und Her entdeckte ich das ' Extended Context Menu ' in TortoiseSVN. Halten Sie die Umschalttaste gedrückt und klicken Sie mit der rechten Maustaste auf die Arbeitskopie. Es gibt jetzt zusätzliche Optionen im TortoiseSVN-Menü, einschließlich " Nicht versionierte Elemente löschen ... ".
Obwohl dies für diese spezielle Frage möglicherweise nicht zutreffend ist (dh im Kontext eines automatisierten Builds), dachte ich, dass es für andere hilfreich sein könnte, die das Gleiche tun möchten.
quelle
Siehe: svn-clean
quelle
Wenn Sie sich in der Windows-Befehlszeile befinden,
Verbesserte Version:
Wenn Sie dies in einer Batch-Datei verwenden, müssen Sie Folgendes verdoppeln
%
:quelle
Ich habe dies meinem Windows-Powershell-Profil hinzugefügt
quelle
--no-ignore
aufsvn status
und-Recurse
zuRemove-Item
Linux-Befehlszeile:
Oder wenn einige Ihrer Dateien root gehören:
Dies basiert auf Kens Antwort. (Kens Antwort überspringt ignorierte Dateien; meine Antwort löscht sie).
quelle
Mach es einfach auf Unix-Shell mit:
quelle
Können Sie nicht einfach einen Export an einen neuen Standort durchführen und von dort aus bauen?
quelle
Wenn Sie TortoiseSVN auf Ihrem Weg haben und sich im richtigen Verzeichnis befinden:
Die Optionen sind in der TortoiseSVN-Hilfe beschrieben für
/command:cleanup
:quelle
Wenn Sie tortoise svn verwenden, gibt es einen versteckten Befehl, um dies zu tun. Halten Sie die Umschalttaste gedrückt, während Sie mit der rechten Maustaste auf einen Ordner klicken, um das Kontextmenü im Windows Explorer zu starten. Sie erhalten den Befehl "Nicht versionierte Elemente löschen".
Weitere Informationen finden Sie unten auf dieser Seite oder in der Abbildung unten, in der die erweiterten Funktionen mit den grünen Sternen und die mit dem gelben Rechteck von Interesse hervorgehoben werden.
quelle
Subversion 1.9.0 führte die Option zum Entfernen nicht versionierter Elemente ein [1]
[1] https://subversion.apache.org/docs/release-notes/1.9.html#svn-cleanup-options
quelle
Meine C # -Konvertierung von Thomas Watnedals Python-Skript:
quelle
Dies ist ein Unix-Shell-Befehl zum Löschen aller Dateien, die nicht unter Subversionskontrolle stehen.
Anmerkungen:
st
Insvn st
ist ein eingebauter Alias fürstatus
, dh der Befehl entsprichtsvn status
--no-ignore
Enthält auch Nicht-Repository-Dateien in der Statusausgabe, die ansonsten über Mechanismen wie.cvsignore
usw. ignoriert werden . Da das Ziel darin besteht, einen sauberen Ausgangspunkt für Builds zu haben, ist dieser Schalter ein Mussgrep
Filter filtern die Ausgabe so, dass nur Dateien übrig bleiben, die der Subversion unbekannt sind. Die Zeilen, die mit?
Listendateien beginnen, die der Subversion unbekannt sind, werden ohne die--no-ignore
Option ignoriertsed
xargs
Befehl wird angewiesen-r
, nicht auszuführenrm
, wenn die Argumentliste leer wäre-d '\n'
Option weistxargs
an, einen Zeilenumbruch als Trennzeichen zu verwenden, sodass der Befehl auch für Dateinamen mit Leerzeichen funktioniertrm -r
wird verwendet, wenn vollständige Verzeichnisse (die nicht Teil des Repositorys sind) entfernt werden müssenquelle
Ohne zusätzliche Abhängigkeiten, die ich meinem automatisierten Build-System unter win32 nicht hinzufügen wollte, konnte ich keines der oben genannten Verfahren zum Laufen bringen. Daher habe ich die folgenden Ant-Befehle zusammengestellt. Beachten Sie, dass für diese die Ant-Contrib-JAR installiert sein muss (ich habe die neueste Version 1.0b3 mit Ant 1.7.0 verwendet).
Beachten Sie, dass dadurch alle nicht konvertierten Dateien ohne Warnung gelöscht werden.
Ändern Sie für einen anderen Ordner die
${basedir}
Referenz.quelle
Entfernen Sie das Echo, wenn Sie sicher sind, was Sie tun möchten.
quelle
/bin/sh
und nrm
Prozesse gegabelt sind.Da alle anderen es tun ...
quelle
Könnte auch eine andere Option beitragen
Die /(config|.ini)/ ist für meine eigenen Zwecke.
Und möglicherweise ist es eine gute Idee, dem Befehl svn --no-ignore hinzuzufügen
quelle
Ich bin auf meiner RH5-Maschine auf svn-clean gestoßen. Es befindet sich unter / usr / bin / svn-clean
http://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/svn-clean
quelle
Reine Windows cmd / bat Lösung:
quelle
Ich habe Seth Renos Version anhand dieser Antwort ausprobiert , aber es hat bei mir nicht funktioniert. Ich hatte 8 Zeichen vor dem Dateinamen, nicht 9 in
cut -c9-
.Das ist also meine Version mit
sed
anstelle voncut
:quelle
Wenn du cool mit Powershell bist:
Entfernen Sie das Flag -WhatIf, damit der Befehl die Löschvorgänge tatsächlich ausführt. Andernfalls wird nur ausgegeben, was es tun würde , wenn es ohne -WhatIf ausgeführt würde.
quelle
Ich würde dies als Kommentar zu Thomas Watnedals Antwort hinzufügen , kann es aber noch nicht.
Ein kleines Problem (das Windows nicht betrifft) ist, dass nur nach Dateien oder Verzeichnissen gesucht wird. Bei Unix-ähnlichen Systemen, in denen möglicherweise symbolische Verknüpfungen vorhanden sind, muss die Zeile geändert werden:
zu
um auch Links zu entfernen.
Für mich die letzte Zeile
if match: removeall(match.group(1))
in ändernEs war auch nützlich, um anzuzeigen, was entfernt wird.
Je nach Anwendungsfall kann der
?[\?ID]
Teil des regulären Ausdrucks besser sein?[\?I]
, daD
auch gelöschte Dateien entfernt werden, die unter Versionskontrolle standen. Ich möchte dies verwenden, um einen sauberen, eingecheckten Ordner zu erstellen, sodass sich keine Dateien in einemD
Status befinden sollten .quelle
@zhoufei Ich habe deine Antwort getestet und hier ist die aktualisierte Version:
%
Markierungen vor G und H verwenden%~1
kann jeder Verzeichnisname verwendet werden, ich habe dies als Funktion in einer Bat-Datei verwendet, also%~1
ist erster Eingabeparameterquelle
Wenn Sie keinen Code schreiben möchten, führt svn2.exe von svn2svn dies aus. Außerdem gibt es einen Artikel über die Implementierung. Gelöschte Ordner und Dateien werden in den Papierkorb gelegt.
Führen Sie "svn2.exe sync [path]" aus.
quelle
Für die Leute, die dies gerne mit Perl anstelle von Python, Unix-Shell, Java usw. machen. Hiermit ein kleines Perl-Skript, das auch den Fock macht.
Hinweis: Dadurch werden auch alle nicht konvertierten Verzeichnisse entfernt
quelle
Verwenden von TortoiseSVN: * Klicken Sie mit der rechten Maustaste auf den Ordner für die Arbeitskopie, während Sie die Umschalttaste gedrückt halten. * Wählen Sie "Nicht versionierte Elemente löschen".
Wie kann ich alle nicht versionierten / ignorierten Dateien / Ordner in meiner Arbeitskopie löschen?
quelle
Ein sauberer Weg, dies in PERL zu tun, wäre:
quelle
Ich habe ~ 3 Stunden gebraucht, um dies zu generieren. Unter Unix würde dies 5 Minuten dauern. Das Hauptproblem war: Leerzeichen in Namen für Win-Ordner, Unmöglichkeit, %% i zu bearbeiten, und Problem beim Definieren von Variablen in der Win-Cmd-Schleife.
quelle
Das obige C # -Code-Snipet hat bei mir nicht funktioniert - ich habe einen Schildkröten-SVN-Client und die Zeilen sind etwas anders formatiert. Hier ist das gleiche Code-Snipet wie oben, nur umgeschrieben, um zu funktionieren und Regex zu verwenden.
quelle