Frage

Wie ignoriere ich Dateien in Subversion?

Auch, wie finde ich Dateien, die nicht unter Versionskontrolle sind?

War es hilfreich?

Lösung

(Diese Antwort wurde aktualisiert SVN übereinstimmen 1.8 und 1.9 Verhalten)

Sie haben 2 Fragen:

Marking-Dateien als ignoriert:

Mit dem „ignoriert Datei“ meine ich die Datei in Listen nicht einmal als „unversionierte“ erscheint. Ihr SVN-Client wird die Datei so tun, als gar nicht existiert im Dateisystem

Ignoriert Dateien werden durch ein „Dateimuster“ angegeben. Die Syntax und das Format von Dateimustern werden in SVN Online-Dokumentation erklärt: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "File Patterns in Subversion".

Subversion, ab Version 1.8 (Juni 2013) und später unterstützt 3 verschiedene Arten von Dateimuster angeben. Hier ist eine Zusammenfassung mit Beispielen:

1 - Runtime Configuration Area - global-ignores Option:

  • Dies ist eine Client-Seite nur Einstellung, so dass Ihre global-ignores Liste wird nicht von anderen Benutzern geteilt werden, und es gilt für all repos Sie auf Ihren Computer Kasse.
  • Diese Einstellung wird in der Runtime-Konfigurationsbereich-Datei definiert:
    • Fenster (dateibasiert) - C:\Users\{you}\AppData\Roaming\Subversion\config
    • Fenster (Registry-basiert) -. Software\Tigris.org\Subversion\Config\Miscellany\global-ignores sowohl HKLM und HKCU
    • Linux / Unix - ~/.subversion/config

2 - Die svn:ignore Eigenschaft, die auf Verzeichnisse (keine Dateien) festgelegt ist:

  • Dies wird im Repo gespeichert, so dass andere Benutzer die gleichen ignorieren Dateien. Ähnlich wie .gitignore funktioniert.
  • svn:ignore wird auf Verzeichnisse angelegt und ist nicht rekursiven oder vererbt. Jede Datei oder sofort Unterverzeichnis des übergeordneten Verzeichnisses, das die Dateimuster übereinstimmt, werden ausgeschlossen.
  • Während SVN 1.8 das Konzept der "vererbten Eigenschaften", fügt die svn:ignore Eigenschaft selbst in nicht-unmittelbaren Nachkommen Verzeichnisse ignoriert wird:

    cd ~/myRepoRoot                             # Open an existing repo.
    echo "foo" > "ignoreThis.txt"                # Create a file called "ignoreThis.txt".
    
    svn status                                  # Check to see if the file is ignored or not.
    > ?    ./ignoreThis.txt
    > 1 unversioned file                        # ...it is NOT currently ignored.
    
    svn propset svn:ignore "ignoreThis.txt" .   # Apply the svn:ignore property to the "myRepoRoot" directory.
    svn status
    > 0 unversioned files                       # ...but now the file is ignored!
    
    cd subdirectory                             # now open a subdirectory.
    echo "foo" > "ignoreThis.txt"                # create another file named "ignoreThis.txt".
    
    svn status
    > ?    ./subdirectory/ignoreThis.txt        # ...and is is NOT ignored!
    > 1 unversioned file
    

    (also die Datei ./subdirectory/ignoreThis nicht ignoriert wird, obwohl "ignoreThis.txt" auf der . Repo-Wurzel angewandt).

  • Daher eine Ignore-Liste anwenden rekursiv müssen Sie svn propset svn:ignore <filePattern> . --recursive verwenden.

    • Dadurch wird eine Kopie des Objekts auf jedem Unterverzeichnis erstellen.
    • Wenn der <filePattern> Wert unterscheidet sich in einem Unterverzeichnis dann Wert des Kindes vollständig die Eltern außer Kraft gesetzt, so dass es keine „additive“ -Effekt.
    • Wenn Sie also das <filePattern> auf der Wurzel . ändern, dann müssen Sie es mit --recursive ändern Sie es auf das Kind und Nachkomme Verzeichnisse zu überschreiben.
  • Ich nehme zur Kenntnis, dass die Befehlszeilensyntax ist kontraintuitiv.

    • Ich begann-off davon aus, dass Sie so etwas wie svn ignore pathToFileToIgnore.txt, indem Sie dies ist jedoch nicht, wie SVN die Funktion funktioniert ignorieren.
    • eine Datei im SVN ignorieren

3- Die svn:global-ignores Eigenschaft. Benötigt SVN 1.8 (Juni 2013):

  • Dies ist ähnlich svn:ignore, außer es Verwendung von SVN 1.8 der „vererbten Eigenschaften“ Funktion macht.
  • Vergleichen auf svn:ignore wird das Dateimuster in jedem Nachkommen Verzeichnis (nicht nur unmittelbare Kinder) automatisch übernommen.
    • Das bedeutet, dass nicht erforderlich ist svn:global-ignores mit dem --recursive Flag zu setzen, wie ignorieren Dateimuster vererbt werden automatisch angelegt, wie sie vererbt sind.
  • Ausführen des gleichen Befehlssatz wie im vorherigen Beispiel, aber mit svn:global-ignores statt:

    cd ~/myRepoRoot                                    # Open an existing repo
    echo "foo" > "ignoreThis.txt"                       # Create a file called "ignoreThis.txt"
    svn status                                         # Check to see if the file is ignored or not
    > ?    ./ignoreThis.txt
    > 1 unversioned file                               # ...it is NOT currently ignored
    
    svn propset svn:global-ignores "ignoreThis.txt" .
    svn status
    > 0 unversioned files                              # ...but now the file is ignored!
    
    cd subdirectory                                    # now open a subdirectory
    echo "foo" > "ignoreThis.txt"                       # create another file named "ignoreThis.txt"
    svn status
    > 0 unversioned files                              # the file is ignored here too!
    

Für TortoiseSVN Nutzer:

Diese ganze Anordnung für mich war verwirrend, weil TortoiseSVN Terminologie (wie in ihrem Windows-Explorer-Menüsystem verwendet wird) wurde zunächst mir irreführend - ich war nicht sicher, was die Bedeutung des Menüs Ignorieren „Add rekursiv“, „hinzufügen *“ und „hinzufügen“, opgen. Ich hoffe, dieser Beitrag wird erläutert, wie die Funktion Bindungen-in zum SVN-Eigenschaften Funktion ignorieren. Das heißt, ich schlage vor, die Befehlszeile ignorierten Dateien zu setzen, so dass Sie ein Gefühl dafür bekommen, wie es funktioniert, anstatt die GUI verwenden, und nur die GUI-Eigenschaften zu manipulieren, nachdem Sie mit der Kommandozeile vertraut sind.

Listing-Dateien, die ignoriert werden:

Der Befehl svn status wird ignoriert Dateien verstecken (das heißt, Dateien, die ein RGA global-ignores Muster entsprechen, oder ein sofortiges svn:ignore Muster übergeordnetes Verzeichnisses des Übereinstimmen oder jedes svn:global-ignores Muster der ancesor Verzeichnisses entsprechen.

Mit der Option --no-ignore die Dateien aufgelistet, um zu sehen. Ignoriert Dateien einen Status I haben, dann leiten Sie die Ausgabe, um nur Linien grep beginnend mit „I“.

Der Befehl lautet:

svn status --no-ignore | grep "^I"

Zum Beispiel:

svn status
> ? foo                             # An unversioned file
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore
> ? foo                             # An unversioned file
> I ignoreThis.txt                  # A file matching an svn:ignore pattern
> M modifiedFile.txt                # A versioned file that has been modified

svn status --no-ignore | grep "^I"
> I ignoreThis.txt                  # A file matching an svn:ignore pattern

ta-da!

Andere Tipps

Verwenden Sie den folgenden Befehl, um eine Liste nicht unter Versionskontrolle von Dateien zu erstellen.

svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt

Dann bearbeiten Sie die Datei auf verlassen nur die Dateien, die Sie eigentlich zu wollen, ignorieren . Dann diese benutzen, um die Dateien zu ignorieren in der Datei aufgelistet:

svn propset svn:ignore -F ignoring.txt .

Beachten Sie den Punkt am Ende der Zeile. Es sagt SVN, dass das Eigentum auf dem aktuellen Verzeichnis festgelegt wird.

Datei löschen:

rm ignoring.txt

Schließlich verpflichten,

svn ci --message "ignoring some files"

Sie können dann überprüfen, welche Dateien ignoriert über:

svn proplist -v

Wenn Sie mit TortoiseSVN der rechten Maustaste auf eine Datei und wählen Sie dann TortoiseSVN / Den ignorieren Liste . Dadurch wird die Datei / Wildcard in der svn:ignore Eigenschaft hinzuzufügen.

svn:ignore wird geprüft werden, wenn Sie in Dateien werden überprüft, und passende Dateien werden ignoriert. Ich habe die Liste für ein Projekt von Visual Studio .NET folgende ignorieren:

bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo

Sie können diese Liste im Kontextmenü finden Sie unter TortoiseSVN / Eigenschaften .

Sie können eine Datei oder ein Verzeichnis wie .gitignore ignorieren. Erstellen Sie einfach eine Textdatei der Liste der Verzeichnisse / Dateien möchten Sie ignorieren und den Code auszuführen unter:

svn propset svn:ignore -F ignorelist.txt .

oder, wenn Sie nicht über eine Textdatei verwenden möchten, können Sie es tun wie folgt aus:

svn propset svn:ignore "first
 second
 third" .

Quelle: Karsten Blog - Set svn: ignore für mehrere Dateien von der Kommandozeile

ich den Artikel gefunden .svnignore Beispiel für Java .

Beispiel: .svnignore für Ruby on Rails,

/log

/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif

*.*~

Und danach:

svn propset svn:ignore -F .svnignore .

Beispiele für .gitignore. Sie können für Ihre .svnignore verwenden

https://github.com/github/gitignore

Wie niemand scheint es, erwähnt zu haben ...

svn propedit svn:ignore .

Dann wird der Inhalt der Datei bearbeiten, um die Muster angeben, um den Editor zu ignorieren, verlassen und Sie sind alles getan.

Wenn propedit verwenden, stellen Sie sicher, dass keine Leerzeichen haben wie die bewirkt, dass die Datei von der Ignore-Liste ausgeschlossen werden.

Diese werden automatisch eingefügt, wenn Sie verwenden Tabula die automatische Vervollständigung auf Linux haben die Datei zu erstellen beginnen mit:

svn propset svn:ignore 'file1
file2' .

Eine andere Lösung ist:

svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt

oder Zeile für Zeile

svn st | awk '/^?/{print $2}' > svnignore.txt 
svn propget svn:ignore >> svnignore.txt 
svn propset svn:ignore -F svnignore.txt . 
rm svnignore.txt

Was es tut:

  1. Ruft die Statusdateien aus dem SVN
  2. Speichert alle Dateien mit ? in der Datei "svnignore.txt"
  3. Ruft die bereits ignoriert Dateien und fügt sie in die Datei „svnignore.txt“
  4. Weist den SVN die Dateien in "svnignore.txt"
  5. zu ignorieren
  6. Entfernt die Datei

Auch wenn Sie Tortoise SVN verwenden Sie können dies tun:

  1. Im Kontextmenü wählen Sie "TortoiseSVN", dann auf "Eigenschaften"
  2. Im erscheinenden Fenster klicken Sie auf "Neu", dann auf "Erweitert"
  3. Im erscheinenden Fenster gegenüber „Eigenschaftsname“ wählen oder „svn: ignore“ geben, gegenüber dem „Eigenschaftswert“ Typ gewünschte Dateinamen oder Ordnernamen oder Dateimaske (in meinem Fall war es „* / target“), klicken Sie auf „Eigenschaft rekursiv“
  4. Ok. Ok.
  5. Commit

Eine lesbare Version von bkbilly Antwort:

svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt

Was es tut:

  1. Ruft die Statusdateien aus dem SVN
  2. Speichert alle Dateien mit ? in der Datei "svnignore.txt"
  3. Ruft die bereits ignoriert Dateien und fügt sie in die Datei „svnignore.txt“
  4. Weist den SVN die Dateien in "svnignore.txt"
  5. zu ignorieren
  6. Entfernt die Datei
  1. cd ~ / .subversion
  2. open Config
  3. finden Sie die Zeile wie 'global-ignores'
  4. set Dateityp wie diese ignorieren. Global-ignores = * .o * .lo * .la * .al .libs * .so .so [0-9] * .pyc * .pyo 88 * .rej ~ # #. # *. *. Swp .DS_Store node_modules Ausgang

Sie können auch ein globales ignorieren Muster in SVN der Konfigurationsdatei festgelegt.

svn status wird Ihnen sagen, welche Dateien nicht in SVN, als auch, was sich geändert hat.

Schauen Sie sich die SVN Eigenschaften für die ignore Eigenschaft.

Für alle Dinge SVN, die Red Book Lesung erforderlich ist .

ein Verzeichnis Subversion Hinzufügen, und ignorieren Sie das Verzeichnis Inhalt

svn propset svn:ignore '\*.*' .

oder

svn propset svn:ignore '*' .

SVN ignore ist einfach in TortoiseSVN zu verwalten. Öffnen Sie TortoiseSVN und Rechtsklick auf Datei-Menü wählen Sie dann hinzufügen Liste ignorieren.

Dadurch werden die Dateien in der svn:ignore Eigenschaft hinzufügen. Wenn wir in den Dateien dann diese Datei überprüft, die mit svn:ignore abgestimmt ist, die ignoriert werden und wird nicht begehen.

In Visual Studio-Projekt haben wir folgende Dateien hinzugefügt zu ignorieren:

bin obj
*.exe
*.dll
*.pdb
*.suo

Wir verwalten Quellcode auf SVN von Comparetrap mit dieser Methode erfolgreich

Mit dem Befehl svn status auf der Arbeitskopie den Status von Dateien anzuzeigen, Dateien, die noch nicht unter Versionskontrolle sind (und nicht ignoriert) wird neben ihnen ein Fragezeichen.

Wie für Dateien ignorieren müssen Sie die SVN bearbeiten: ignore Eigenschaft, lesen Sie das Kapitel Ignorieren Unversioned Angebote im svnbook unter http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore.html . Das Buch beschreibt auch mehr über SVN-Status verwendet wird.

  1. Öffnen Sie verwenden JetBrains Produkt (d. PyCharm)
  2. klicken Sie dann auf die ‚commit‘ -Taste auf der oberen Symbolleiste oder verwenden Abkürzung ‚ctrl + k‘ screenshot_toolbar
  3. auf der Schnittstelle verpflichten, Ihre unerwünschten Dateien auf einem anderen Änderungsliste bewegt wie folgt. screenshot_commit_change
  4. nächstes Mal, wenn Sie nur Standard-Änderungsliste begehen können.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top