Wie ignoriere ich ein Verzeichnis mit SVN?


760

Ich habe gerade angefangen, SVN zu verwenden, und ich habe ein Cache-Verzeichnis, das ich unter Quellcodeverwaltung nicht benötige. Wie kann ich das gesamte Verzeichnis / Ordner mit SVN ignorieren?

Ich verwende Versionen und TextMate unter OS X und der Befehlszeile.


3
Ähnliche Frage hier beantwortet [SVN Checkout ignorieren Ordner] [1] [1]: stackoverflow.com/questions/192824/svn-checkout-ignore-folder
mloskot

Mögliches Duplikat von Wie ignoriere ich Dateien in Subversion? (Es ist mir egal, in welche Richtung das Duplikat geht; keine der Antworten ist offensichtlich besser als die andere.)
Jeffrey Bosboom

Antworten:


796

Legen Sie die svn:ignoreEigenschaft des übergeordneten Verzeichnisses fest:

svn propset svn:ignore dirname .

Wenn Sie mehrere Dinge ignorieren müssen, trennen Sie den Eigenschaftswert durch Zeilenumbrüche. In diesem Fall ist es einfacher, den Eigenschaftswert mit einem externen Editor zu bearbeiten:

svn propedit svn:ignore .

2
@Kouber: Ihr Problem ist, dass die Shell-Erweiterung nichts über svn: ignore-Eigenschaften weiß. Wenn Sie also '*' als Parameter explicityl verwenden, wird tmp an den Befehl commit übergeben. Versuchen Sie etwas wie 'svn commit -m "Mehr Akzente".'
MarkusSchaber

4
Danke für die Antwort. Pico als Editor: svn propedit svn: ignorieren. --editor-cmd pico
hade

157
Hinweis: Dies funktioniert nicht, wenn sich das Verzeichnis bereits "in" svn befindet. svn rm --keep-local dirnamezuerst. (Meine svn stat Ausgabe war riesig und ich stieß meinen Kopf für eine Weile in diese.)
Erik Aronesty

10
Wenn Sie mehr als eine Datei / einen Ordner ignorieren möchten, fügen Sie alle ihre Namen zu einer txt-Datei mit jeweils einer Zeile hinzu und verwenden Sie die folgende Variante:svn propset svn:ignore -F file.txt .
petervaz

2
Seien Sie vorsichtig, dass Sie einstellen svn:ignoreund nicht svn::ignorewie ich. Sie können beliebige Eigenschaften festlegen, sodass letztere auf OK gesetzt werden und Sie die Eigenschaft anzeigen und bearbeiten können. SVN ignoriert jedoch nicht die von Ihnen aufgelisteten Dateien.
Richard Turner

406

Hier ist ein Beispiel für eine Verzeichnisstruktur:

\project
    \source
    \cache
    \other

Wenn projectSie sehen, dass Ihr Cache-Verzeichnis nicht hinzugefügt wurde und als solches angezeigt wird.

> svn st
M  source
?  cache

Führen Sie die folgenden Schritte aus, um die Eigenschaft ignore festzulegen

svn propset svn: Cache ignorieren.

Wo svn:ignoreist der Name der Eigenschaft, die Sie festlegen, cacheist der Wert der Eigenschaft und .ist das Verzeichnis, in dem Sie diese Eigenschaft festlegen. Es sollte das übergeordnete Verzeichnis des cacheVerzeichnisses sein, das die Eigenschaft benötigt.

So überprüfen Sie, welche Eigenschaften festgelegt sind:

> svn proplist
Properties on '.':
  svn:ignore

Um den Wert von zu sehen svn:ignore:

> svn propget svn:ignore
cache

So löschen Sie zuvor festgelegte Eigenschaften:

svn propdel svn:ignore

17
Ein kniffliger Punkt hier, über den ich gestolpert bin. Achten Sie darauf , nicht Slash hinzuzufügen dirname. Wenn Sie beispielsweise bei der Eingabe svn propset svn:ignore dirnamezulassen, dass die (Bash-) Shell den Verzeichnisnamen für Sie ausfüllt, wird dieser abschließende Schrägstrich hinzugefügt, sodass Sie den Befehl erhalten svn propset svn:ignore dirname/, der nicht dazu führt, dass der Ordner ignoriert wird. Zumindest war das meine Erfahrung.
David Weinraub

4
Das 'Cache'-Verzeichnis wird weiterhin in' svn st 'aufgeführt. Gibt es eine Möglichkeit, es aus der Ansicht zu entfernen? (ohne von der Festplatte zu löschen)
Tom Brito

131

Wichtig zu erwähnen:

In der Kommandozeile können Sie nicht verwenden

svn add *

Dadurch werden auch die ignorierten Dateien hinzugefügt , da die Befehlszeile erweitert wird *und daher davon svn addausgegangen wird, dass alle Dateien hinzugefügt werden sollen. Verwenden Sie daher stattdessen Folgendes:

svn add --force .

Mach genau das, was @binco gesagt hat: WIRD svn add --force *NICHT funktionieren. Verwenden Sie den Punkt, nicht den Stern.
manuell

80

Da ich eine Weile versucht habe, dies zum Laufen zu bringen, sollte beachtet werden, dass Sie, wenn die Dateien bereits in SVN vorhanden sind, diese benötigen svn deleteund dann die svn:ignoreEigenschaft bearbeiten müssen .

Ich weiß, dass das offensichtlich erscheint, aber sie tauchten immer wieder wie ?in meiner svn statusListe auf, als ich dachte, es würde sie lokal einfach ignorieren.


8
Vergessen Sie nicht, beim Löschen der Dateien die Option --keep-local zu verwenden, wenn Sie sie nur ignorieren und nicht tatsächlich löschen möchten.
Dylan Holmes

71

Wenn Sie dies mit dem Befehlszeilentool svn tun, möchten Sie Folgendes eingeben:

svn propedit svn:ignore path/to/dir

Dadurch wird der Texteditor Ihrer Wahl geöffnet. Geben Sie dann '*' ein, um alles darin zu ignorieren, und speichern Sie + Beenden. Dies schließt das Verzeichnis selbst in svn ein. Ignorieren Sie jedoch alle darin enthaltenen Dateien. Um das Verzeichnis zu ignorieren, verwenden Sie die Pfad des übergeordneten Elements, und geben Sie dann den Namen des Verzeichnisses in die Datei ein. Führen Sie nach dem Speichern ein Update aus ('svn up') und überprüfen Sie den entsprechenden Pfad.


8
Sehr guter Punkt, danke. Bei allen anderen Antworten wurde der Fall verschachtelter Verzeichnisse übersehen. Das obige Beispiel (funktioniert), das Sie dann in den Editor ignore_directory eingeben (was unter der Annahme eine Ebene unter path / to / dir liegt). Dies wird jedoch nicht funktionieren: svn propedit svn: ignorieren. und geben Sie dann path / to / dir / ignore_directory im Editor ein. IOW: SVN gleicht Objekte jeweils eine Ebene tiefer ab.
Greenoldman

30

Stellen Sie die svn:ignore Eigenschaft für das übergeordnete Verzeichnis fest:

$ cd parentdir
$ svn ps svn:ignore . 'cachedir'

Dadurch wird jeder aktuelle Wert von überschrieben svn:ignore . Sie können den Wert bearbeiten mit:

$ svn pe svn:ignore .

Welches wird Ihren Editor öffnen. Sie können mehrere Muster hinzufügen, eines pro Zeile.

Sie können den aktuellen Wert anzeigen mit:

$ svn pg svn:ignore .

Wenn Sie eine grafische Benutzeroberfläche verwenden, sollte hierfür eine Menüoption vorhanden sein.


3
svn ps svn:ignore . 'cachedir'führt zu cachedir is not under version control. Wechsel zu svn ps svn:ignore 'cachedir' .für mich gearbeitet
DiCaprio

21

Vielen Dank für alle Beiträge oben. Ich möchte nur einige zusätzliche Informationen aus meinen Erfahrungen teilen, während ich Dateien ignoriere.


Wenn die Ordner bereits unter Revisionskontrolle stehen

Nach dem SVN-Import und dem SVN-Co die Dateien, was wir normalerweise zum ersten Mal tun.

Alle Ordner für Laufzeitcaches und Anhänge unterliegen der Versionskontrolle. Bevor Sie svn ps svn: ignorieren , müssen Sie es aus dem Repository löschen.

Mit SVN Version 1.5 können wir verwenden svn del --keep-local your_folder, aber für eine frühere Version ist meine Lösung:

  1. svn exportiert eine saubere Kopie Ihrer Ordner (ohne .svnversteckten Ordner)
  2. svn del das lokale und Repository,
  3. svn ci
  4. Kopieren Sie die Ordner zurück
  5. Do svn st und bestätigen Sie die Ordner markiert sind als ‚?‘
  6. Jetzt können wir svn ps gemäß den Lösungen ausführen

Wenn mehr als ein Ordner ignoriert werden muss

  • In einem Verzeichnis habe ich zwei Ordner, die als festgelegt werden müssen svn:ignore
  • Wenn wir eins einstellen, wird das andere entfernt.
  • Dann fragen wir uns, ob wir svn pe brauchen

svn peSie müssen die Textdatei bearbeiten, und Sie können diesen Befehl bei Bedarf verwenden, um Ihren Texteditor mit vi festzulegen :

export SVN_EDITOR=vi
  1. Mit "o" können Sie eine neue Zeile öffnen
  2. Geben Sie alle Ordnernamen ein, die Sie ignorieren möchten
  3. Drücken Sie die Esc-Taste, um den Bearbeitungsmodus zu verlassen
  4. Geben Sie ": wq" ein Enterund drücken Sie , um zu speichern und zu beenden

Die Datei sieht ungefähr so ​​aus:

runtime
cache
attachments
assets

Sie können auch verwenden svn propset svn:ignore -F .ignorethesefiles ., wodurch der Inhalt der Datei verwendet wird. Ich mag es, es herumzuhalten, damit Sie wissen, was ignoriert wird. Änderungen erfordern eine Nachverfolgung.
Gerard ONeill

20

Entfernen Sie es zuerst ...

Wenn Ihr Verzeichnis foobereits unter Versionskontrolle steht, entfernen Sie es zuerst mit:

svn rm --keep-local foo

... dann ignorieren:

svn propset svn:ignore foo .

12

... und wenn Sie mehr als ein Verzeichnis (z. B. build/ temp/und *.tmpDateien) ignorieren möchten , können Sie dies entweder in zwei Schritten tun (das erste ignorieren und die Ignoriereigenschaften bearbeiten (siehe andere Antworten hier) oder so etwas schreiben

svn propset svn:ignore "build
temp
*.tmp" .

in der Kommandozeile.


12

Wenn Sie den bestimmten SVN-Client TortoiseSVN verwenden , haben Sie beim Festschreiben die Möglichkeit, mit der rechten Maustaste auf Elemente zu klicken und "Zur Ignorierliste hinzufügen" auszuwählen.


9

Der Befehl zum Ignorieren mehrerer Einträge ist etwas schwierig und erfordert Backslashes.

svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .

Dieser Befehl wird alles genannt ignorieren cache, tmp, null, und and_so_onim aktuellen Verzeichnis.


6
Und nur um zu verdeutlichen: Der Backslash hier ist kein Merkmal von svn; Es ist einfach eine Möglichkeit, eine mehrzeilige Zeichenfolge in die Shell einzugeben. Sie können auch einen Editor verwenden und einfach mehrere Zeilen schreiben.
Sleske

Für Bash ist kein Backslash erforderlich. bash ist klug genug zu wissen, dass ein "offen ist und die Zeile nicht verarbeitet. Alles, was Sie tun müssen, ist die Eingabetaste nach Cache, tmp und null zu drücken. Sie werden sehen, dass bash die Eingabeaufforderung in a> ändert, damit Sie Sie kennen Sie können den Befehl immer noch eingeben. Alternativ können Sie mit der Eingabe des Befehls (svn) beginnen und dann esc und dann v drücken. Dadurch können Sie den Befehl im Editor eingeben. Drücken Sie ZZ, wenn Sie fertig sind, um den Befehl auszuführen. Wenn Sie Ihre Meinung ändern und will nicht ausführen, dann: q!.
Michael Potter

1
svn propset svn:ignore -F .ignorethesefiles .ermöglicht es Ihnen, eine Datei zu verwenden. Und wie gesagt, Sie haben immer Propedit.
Gerard ONeill

5

Ich hatte Probleme, verschachtelte Verzeichnisse zu ignorieren. Das oberste Verzeichnis, das ich ignorieren wollte, wurde nicht mit 'svn status' angezeigt, aber alle Unterverzeichnisse haben es getan. Dies ist wahrscheinlich für alle anderen selbstverständlich, aber ich dachte, ich würde es teilen:

BEISPIEL:

/Kofferraum

/ trunk / cache

/ trunk / cache / subdir1

/ trunk / cache / subdir2

cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci

4

"Danke" svn für solch eine abscheuliche, falsche und schwierige Art, Dateien zu ignorieren.

Also schrieb ich ein Skript svn-ignore-all :

#!/bin/sh

# svn-ignore-all

# usage: 
#   1. run svn status to see what is going on at each step 
#   2. add or commit all files that you DO want to have in svn
#   3. remove any random files that you don't want to svn:ignore
#   4. run this script to svn:ignore everything marked '?' in output of `svn status`

svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

Um eine bestimmte Liste von Dateien / Pfadnamen zu ignorieren, können wir diese Variante svn-ignore verwenden . Ich denke, svn-ignore-all sollte wirklich wie xargs svn-ignore sein.

#!/bin/sh

# svn-ignore

# usage:
#   svn-ignore file/to/ignore ...

for f; do
    d=`dirname "$f"`
    b=`basename "$f"`
    ignore=`svn propget svn:ignore "$d"`
    if [ -n "$ignore" ]; then
        ignore="$ignore
"
    fi
    ignore="$ignore$b"
    svn propset svn:ignore "$ignore" "$d"
done

Noch etwas: Ich neige dazu, meine SVN-Kassen mit vielen zufälligen Dateien zu verschmutzen. Wenn es Zeit zum Festschreiben ist, verschiebe ich diese Dateien in ein 'altes' Unterverzeichnis und fordere svn auf, 'alt' zu ignorieren.


Hey Sam, das ist ein schönes Drehbuch. In meinem Kopf tauchte die Frage auf: Liegt das Problem möglicherweise daran, dass das Ignorieren eines gesamten Ordners, der Teil des Repositorys ist, nicht funktioniert, sodass wir am Ende diese '?' Dateien, die im Grunde genommen geänderte Dateien in Ordnern sind, die wir der Ignorierliste hinzugefügt haben? Ich frage mich nur, ob es einen Weg gibt, um Ihr Skript zu umgehen, da es mühsam wäre, es die ganze Zeit auszuführen. Machst du?
SquareCat

Nein, ich benutze es nicht wirklich! Versuchen Sie einfach, meine Dateien zu bereinigen
Sam Watkins

4

Bash Oneliner für mehrfache Ignorierungen:

svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"

3

Wenn Ihr Projektverzeichnis / Project und Ihr Cache-Verzeichnis / Project / Cache heißt, müssen Sie eine Subversionseigenschaft für / Project festlegen. Der Eigenschaftsname sollte "svn: ignore" sein und der Eigenschaftswert sollte "Cache" sein.

Weitere Informationen zu Eigenschaften finden Sie auf dieser Seite im Subversion-Handbuch.


3

Jasons Antwort wird es schaffen. Anstatt jedoch svn: auf "zu ignorieren" zu setzen. Im Cache-Verzeichnis möchten Sie möglicherweise "cache" in die Eigenschaft svn: ignore des übergeordneten Verzeichnisses aufnehmen, falls das Cache-Verzeichnis nicht immer vorhanden ist. Ich mache das auf einer Reihe von "Wegwerf" -Ordnern.


3

VERZEICHNISSE BEHALTEN, DIE SVN IGNORIEREN WIRD:

  1. Dadurch werden die Dateien aus dem Repository gelöscht, das Verzeichnis bleibt jedoch unter SVN-Kontrolle:

svn delete --keep-local path / directory_to_keep / *

  1. Stellen Sie dann ein, dass das Verzeichnis (und der gesamte Inhalt) ignoriert werden:

svn propset svn: ignoriere "*" path / directory_to_keep


2

Wenn Sie ein Frontend für SVN wie TortoiseSVN oder eine Art IDE-Integration verwenden, sollte im selben Menü wie beim Festschreiben / Hinzufügen auch eine Ignorieroption vorhanden sein.


1

Legen Sie die Eigenschaft svn: ignore fest . Die meisten UI-SVN-Tools bieten eine Möglichkeit dazu sowie die Befehlszeilendiskussion im Link.


1

Da Sie Versionen verwenden, ist es eigentlich ganz einfach:

  • Durchsuchen Sie Ihre ausgecheckte Kopie
  • Klicken Sie auf das zu ignorierende Verzeichnis
  • Klicken Sie im Feld "Ignorieren" rechts auf Bearbeiten
  • Geben Sie *. * Ein, um alle Dateien zu ignorieren (oder * .jpg nur für JPG-Dateien usw.)

1

Achten Sie auch auf Ihre nachgestellten Schrägstriche. Ich habe festgestellt, dass das Einfügen images/*in meine Ignorier-Einstellungsdatei nicht ignoriert wurde ./images/. Als ich lief svn status -u, zeigte es sich immer noch ? images. Also habe ich die Ignoriereinstellung einfach auf " imagesKeine Schrägstriche" geändert . Hat eine Statusprüfung durchgeführt und das hat es gelöscht.


1

Auf die nächste Weise mit Eclipse gelöst :

Führen Sie zunächst eine Synchronisierung Ihres Ordners mit dem Projekt durch:

Team -> synchronisieren

In der nächsten Ansicht, Teamansicht, sehen Sie alle Ressourcen, die Sie für den SVN-Server festschreiben können.

Wählen Sie also den Ressourcenordner der Ressource aus, die Sie ignorieren möchten, und ignorieren Sie ihn dann mit

Team -> hinzufügen zu svn:ignore.

Wählen Sie danach im Bestätigungsfenster die erste Option: "Nach Namen ignorieren".

Wenn ich beispielsweise den Zielordner und seine .class-Ressourcen ignorieren möchte, synchronisiere ich und wähle in der Synchronisierungsansicht den Zielordner aus. Danach werde ich auswählen

team-> hinzufügen

bis svn:ignoreund dann bestätige ich die erste Option im Bestätigungsfenster.


0

Nachdem ich viel Zeit verloren hatte, um nach dieser einfachen Aktivität zu suchen, entschied ich mich zu posten, dass es nicht schwer war, eine anständige Erklärung zu finden.

Lassen Sie zuerst die Probenstruktur

$ svn st? Projekt / Kofferraum / Ziel? project / trunk / myfile.x

1 - Konfigurieren Sie zuerst den Editor in mycase vim export SVN_EDITOR = vim

2 - "svn propedit svn: Projekt / Trunk / ignorieren" öffnet eine neue Datei und Sie können Ihre Dateien und Ihr Unterverzeichnis in uns hinzufügen. Geben Sie "Ziel" ein, speichern und schließen Sie die Datei und funktioniert

$ svn st? project / trunk / myfile.x

Vielen Dank.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.