2009-08-20 7 views
2

Lange Rede, kurzer Sinn, ein Fehler wurde gemacht, und jetzt habe ich mindestens einhundert Dateien in Dutzenden von Ordnern, die aus meinem Repository entfernt werden müssen.SVN: alle mit "!" Markierten Dateien setzen zu "D"?

Im Moment sind sie alle als "!" Markiert. in svn status und ich möchte sie entfernen, ohne manuell eingeben svn entfernen blahblah.

Gibt es einen schnellen Weg, dies zu tun?

+0

Windows? Linux? – RedFilter

+0

Ah, Entschuldigung. Es ist OSX, aber die Antwort unten funktioniert. –

+0

Anwendungen sollten Menschen nicht erlauben, ihre Fehler mit 10000 zu multiplizieren: P Oh, die Schrecken, die ich hatte, wenn ich dachte, ein schnelles "alles ersetzen" würde meine refactoring Probleme lösen :) – cwap

Antwort

5

Dies ist ziemlich einfach mit ein wenig Shell-Scripting-Foo zu tun.

svn status | grep "^\!" | awk '{print $2}' | xargs svn del 

Hier ist eine Panne, wie gewünscht:

  • Der Ausgang des svn status zu grep
  • grep Rohre geleitet wird jede Zeile, die in einem regulären Ausdruck mit einem ! (The ^ beginnt bedeutet Zeilenanfang , und das '\' ist notwendig, um die spezielle Bedeutung von zu umgehen
  • awk dann nimmt das zweite "Argument" (so zu sprechen .. dies der Pfad der Datei ist) von grep und Rohren nur zu ...
  • xargs, die für den Aufbau einer Ausführung von Shell-Befehle von der Standardeingabe einfach ist ein Dienstprogramm, das den Befehl und führt erzeugt svn del your/file/here

können Sie auch Varianten verwenden, um auf dieser Linie mit svn alle Arten von praktischen Dinge zu tun, wie rekursiv Dateien in den Repo-Zugabe:

svn status | grep "^\?" | awk '{print $2}' | xargs svn add 

auch ich gerade daran erinnert, und wollte, dass dies darauf hin, funktioniert nicht, wenn Sie Leerzeichen in Ihrem Pat haben h oder Dateinamen. Das vergesse ich immer, weil ich es nie tue. Wenn Sie Leerzeichen in Pfaden/Dateinamen haben, verwenden Sie die folgende Variante des ersten Beispiel:

svn status | grep "^\!" | sed -e 's/? *//' | sed -e 's/ /\\ /g' | xargs svn del 

(Es ist wahrscheinlich eine anmutige Weise zu tun, so fühlen sich frei zu läuten). In diesem Fall nimmt der erste sed das erste Leerzeichen und alle darauf folgenden Leerzeichen (falls vorhanden) auf und entfernt sie (im Grunde eine Trimmung). Dann ersetzt der zweite Aufruf an sed alle verbleibenden Räume mit \, die ein escape-Raum ist, soweit es die Shell betrifft. Denken Sie daran, Sie könnten es wahrscheinlich nur mit Anführungszeichen umhüllen ...

+0

Wenn Sie die Datei nicht lokal entfernen möchten Vergessen Sie nicht das Argument --keep-local. – RedFilter

+0

Danke. Ich bin immer noch etwas neu in der Shell, also möchte ich sicherstellen, dass ich verstehe, was diese Zeile macht. Die Ausgabe von svn status wird als Datei für grep verwendet, die nach sucht! (Was macht das?). Ich nehme an, $ 2 bezieht sich auf die zweite Gruppe von Nicht-Whitespace-Zeichen, die in Svn del gesetzt wird? Ist das richtig? –

+0

Ja, das klingt richtig. "^" passt zum Anfang der Zeile und unterscheidet zwischen Strings wie ".....! ..." und "! ......" –

Verwandte Themen