wake-up-neo.com

Wie ignoriere ich ein Verzeichnis mit SVN?

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/den gesamten Ordner mit SVN ignorieren?

Ich benutze Versionen und TextMate auf OS X und Kommandozeile.

747
Gilean

Legen Sie die svn:ignore -Eigenschaft des übergeordneten Verzeichnisses fest:

svn propset svn:ignore dirname .

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

svn propedit svn:ignore .
788
Jason Cohen

Hier ist ein Beispiel für eine Verzeichnisstruktur:

\project
    \source
    \cache
    \other

In project sehen Sie, dass Ihr Cache-Verzeichnis nicht hinzugefügt wurde und als solches angezeigt wird.

> svn st
M  source
?  cache

Führen Sie Folgendes aus, um die Eigenschaft ignore festzulegen

svn propset svn: Cache ignorieren.

dabei ist svn:ignore der Name der Eigenschaft, die Sie festlegen, cache der Wert der Eigenschaft und . das Verzeichnis, in dem Sie diese Eigenschaft festlegen. Es sollte das übergeordnete Verzeichnis des Verzeichnisses cache sein, das die Eigenschaft benötigt.

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

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

So zeigen Sie den Wert von svn:ignore an:

> svn propget svn:ignore
cache

So löschen Sie zuvor festgelegte Eigenschaften:

svn propdel svn:ignore
404
craigb

Wichtig zu erwähnen:

Auf der Kommandozeile können Sie nicht verwenden

svn add *

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

svn add --force .
130
binco

Da ich eine Weile damit verbracht habe, dies zum Laufen zu bringen, sollte beachtet werden, dass, wenn die Dateien bereits in SVN existieren, Sie sie svn delete und dann die Eigenschaft svn:ignore bearbeiten müssen.

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

79
Kai

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

svn propedit svn:ignore path/to/dir

dadurch wird der gewünschte Texteditor geöffnet. Geben Sie dann '*' ein, um alles darin zu ignorieren, und speichern Sie + beenden. Dies schließt das Verzeichnis selbst in svn ein, ignoriert jedoch alle darin enthaltenen Dateien. Um das Verzeichnis zu ignorieren, verwenden Sie die Pfad des übergeordneten Elements, und geben Sie 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.

70
Greg

Legen Sie die svn:ignore -Eigenschaft im übergeordneten Verzeichnis fest:

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

Dadurch wird der aktuelle Wert von svn:ignore überschrieben. Sie bearbeiten den Wert 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 GUI verwenden, sollte dazu eine Menüoption vorhanden sein.

28
Frank Szczerba

Vielen Dank für alle Beiträge oben. Ich möchte nur einige zusätzliche Informationen aus meinen Erfahrungen beim Ignorieren von Dateien mitteilen.


Wenn sich die Ordner bereits unter Versionskontrolle befinden

Nach svn importieren und svn co die Dateien, was wir normalerweise zum ersten Mal tun.

Alle Laufzeit-Cache-Ordner und Anhänge unterliegen der Versionskontrolle. Vor svn ps svn: ignore müssen wir es also aus dem Repository löschen.

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

  1. svn exportiert eine saubere Kopie Ihrer Ordner (ohne .svn versteckten Ordner)
  2. svn del das lokale und das Repository,
  3. svn ci
  4. Kopieren Sie die Ordner zurück
  5. Mache svn st und bestätige, dass die Ordner als '?' Markiert sind
  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 svn:ignore festgelegt werden müssen
  • Wenn wir eins setzen, wird das andere entfernt.
  • Dann fragen wir uns, ob wir svn pe brauchen.

svn pe muss die Textdatei bearbeiten, und Sie können diesen Befehl bei Bedarf verwenden, um Ihren Texteditor mit vi einzustellen:

export SVN_EDITOR=vi
  1. Mit "o" können Sie eine neue Zeile erö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. Tippe ": wq" und drücke dann Enter zu speichern und zu beenden

Die Datei sieht einfach so aus:

runtime
cache
attachments
assets
20
Elliot Yap

Entfernen Sie es zuerst ...

Wenn sich Ihr Verzeichnis foo bereits in der Versionskontrolle befindet, entfernen Sie es zuerst mit:

svn rm --keep-local foo

... dann ignoriere:

svn propset svn:ignore foo .
19
matt burns

... und wenn Sie mehr als ein Verzeichnis ignorieren möchten (sagen Sie build/temp/ und *.tmp Dateien), können Sie dies in zwei Schritten tun (Ignorieren der ersten und Bearbeiten der Ignoriereigenschaften) (siehe andere Antworten hier) oder man könnte sowas schreiben

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

in der Befehlszeile.

12
DerMike

Wenn Sie den speziellen 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.

11
Michael Lang

Der Befehl zum Ignorieren mehrerer Einträge ist etwas kompliziert und erfordert umgekehrte Schrägstriche.

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

Dieser Befehl ignoriert alle Einträge mit den Namen cache, tmp, null und and_so_on im aktuellen Verzeichnis.

7
James Stroud

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
5
brainycat

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

Also habe ich ein Skript geschrieben 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

Eine weitere Sache: Ich neige dazu, meine SVN-Kassen mit vielen zufälligen Dateien zu verschmutzen. Wenn es Zeit für ein Commit ist, verschiebe ich diese Dateien in ein 'altes' Unterverzeichnis und fordere svn auf, 'altes' zu ignorieren.

4
Sam Watkins

Bash ein Liner für mehrere ignoriert:

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

M VERZEICHNISSE ZU BEWAHREN, DIE SVN NICHT BEACHTEN 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

3
sheasie

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

Weitere Informationen zu den Eigenschaften finden Sie auf der Seite this im Subversion-Handbuch.

3

Jasons Antwort wird den Trick machen. Anstatt jedoch svn: ignore auf "." Im Cache-Verzeichnis können Sie "cache" in die svn: ignore-Eigenschaft des parent -Verzeichnisses aufnehmen, falls das Cache-Verzeichnis nicht immer vorhanden ist. Ich mache dies auf einer Reihe von "Wegwerf" -Ordnern.

3
harpo

Wenn Sie ein Frontend für SVN wie TortoiseSVN oder eine Art IDE -Integration verwenden, sollte es auch eine Ignorieroption in demselben Menü geben wie die Festschreibungs-/Hinzufügungsoperation.

2

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" mit der rechten Maustaste auf "Bearbeiten"
  • Geben Sie *. * Ein, um alle Dateien zu ignorieren (oder * .jpg nur für jpg-Dateien usw.)
1
Andrew

Setze das svn: ignore Eigenschaft . Die meisten UI-SVN-Tools haben eine Möglichkeit, dies zu tun, ebenso wie die Kommandozeilen-Diskussion im Link.

1
Joe Skora

Mit Eclipse wie folgt gelöst:

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

team -> synchronisieren

In der nächsten Ansicht, der Teamansicht, sehen Sie alle Ressourcen, die Sie dem SVN-Server zuweisen können.

Wählen Sie also den Ressourcenordner der Ressource aus, die Sie ignorieren möchten, und können Sie ihn dann mithilfe von ignorieren

team -> zu svn:ignore hinzufügen.

Wählen Sie anschließend 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

zu svn:ignore und dann bestätige ich die erste Option im Bestätigungsfenster.

1
Antonio Martin

Achte auch auf deine abschließenden Schrägstriche. Ich habe festgestellt, dass das Einfügen von images/* in meine Einstellungsdatei zum Ignorieren von ./images/ nicht ignoriert hat. Als ich svn status -u lief, zeigte es noch ? images. Also habe ich die Einstellung zum Ignorieren einfach in images geändert, ohne Schrägstriche. Lief eine Statusüberprüfung durch und das löschte es.

1
cdmo

Nachdem ich viel Zeit verloren hatte, um nach dieser einfachen Übung zu suchen, beschloss ich, eine Erklärung zu veröffentlichen, die nicht schwer zu finden war.

Lassen Sie zuerst die Musterstruktur

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

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

2 - “svn propedit svn: ignore project/trunk /” öffnet eine neue Datei und Sie können Ihre Dateien und Unterverzeichnisse in unserem Falltyp “target” speichern und schließen und funktioniert

$ svn st? project/trunk/myfile.x

vielen Dank.

0
Bruno