it-swarm-eu.dev

Wie ignoriere ich Dateien in Subversion?

Wie ignoriere ich Dateien in Subversion?

Wie finde ich auch Dateien, die nicht der Versionskontrolle unterliegen?

589
andyuk

(Diese Antwort wurde aktualisiert, um dem Verhalten von SVN 1.8 und 1.9 zu entsprechen.)

Du hast 2 Fragen:

Dateien als ignoriert markieren:

Mit "ignorierte Datei" meine ich, dass die Datei nicht als "unversioned" in Listen angezeigt wird: Ihr SVN-Client gibt vor, dass die Datei im Dateisystem überhaupt nicht vorhanden ist.

Ignorierte Dateien werden durch ein "Dateimuster" angegeben. Die Syntax und das Format von Dateimustern wird in der Online-Dokumentation von SVN erläutert: http://svnbook.red-bean.com/nightly/de/svn.advanced.props.special.ignore.html "Dateimuster in Subversion ".

Subversion ab Version 1.8 (Juni 2013) und höher unterstützt drei verschiedene Arten, Dateimuster anzugeben. Hier eine Zusammenfassung mit Beispielen:

1 - Laufzeitkonfigurationsbereich - Option global-ignores:

  • Dies ist nur eine Einstellung für clientseitig, sodass Ihre global-ignores-Liste nicht von anderen Benutzern freigegeben wird. Sie gilt für alle Repos, die Sie auf Ihrem Computer ausgecheckt haben.
  • Diese Einstellung ist in Ihrer Runtime-Konfigurationsbereichsdatei definiert:
    • Windows (dateibasiert) - C:\Users\{you}\AppData\Roaming\Subversion\config
    • Windows (registrierungsbasiert) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignores in HKLM und HKCU.
    • Linux/Unix - ~/.Subversion/config

2 - Die svn:ignore-Eigenschaft, die für Verzeichnisse (nicht für Dateien) festgelegt ist:

  • Diese wird im Repo gespeichert, so dass andere Benutzer die gleichen Ignorier-Dateien haben. Ähnlich wie .gitignore.
  • svn:ignore wird auf Verzeichnisse angewendet und ist nicht rekursiv oder vererbt. Alle Dateien oder unmittelbar -Unterverzeichnisse des übergeordneten Verzeichnisses, die dem Dateimuster entsprechen, werden ausgeschlossen.
  • Während SVN 1.8 das Konzept der "geerbten Eigenschaften" hinzufügt, wird die svn:ignore-Eigenschaft selbst in nicht unmittelbar nachkommenden Verzeichnissen ignoriert:

    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
    

    (Die Datei ./subdirectory/ignoreThis wird also nicht ignoriert, obwohl "ignoreThis.txt" auf den . Repo-Stamm angewendet wird).

  • Um eine Ignorierliste rekursiv anzuwenden, müssen Sie svn propset svn:ignore <filePattern> . --recursive verwenden.

    • Dadurch wird eine Kopie der Eigenschaft in jedem Unterverzeichnis erstellt.
    • Wenn der <filePattern>-Wert in einem untergeordneten Verzeichnis unterschiedlich ist, überschreibt der untergeordnete Wert die übergeordneten Elemente vollständig, so dass es keinen "additiven" Effekt gibt.
    • Wenn Sie also <filePattern> im Stammverzeichnis . ändern, müssen Sie ihn mit --recursive ändern, um ihn in den untergeordneten und untergeordneten Verzeichnissen zu überschreiben.
  • Ich stelle fest, dass die Befehlszeilensyntax gegenintuitiv ist.

    • Ich ging davon aus, dass Sie eine Datei in SVN ignorieren würden, indem Sie etwas wie svn ignore pathToFileToIgnore.txt eingeben. Dies funktioniert jedoch nicht so, wie die Ignor-Funktion von SVN funktioniert.

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

  • Dies ist ähnlich zu svn:ignore, außer dass die Funktion "geerbte Eigenschaften" von SVN 1.8 verwendet wird.
  • Im Vergleich zu svn:ignore wird das Dateimuster automatisch in jedes untergeordnete Verzeichnis angewendet (nicht nur für untergeordnete Objekte) .
    • Dies bedeutet, dass es nicht erforderlich ist, svn:global-ignores mit dem Flag --recursive festzulegen, da vererbte Muster für Ignorierungsdateien automatisch übernommen werden, wenn sie vererbt werden.
  • Führen Sie denselben Befehlssatz wie im vorherigen Beispiel aus, verwenden Sie stattdessen jedoch svn:global-ignores:

    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-Benutzer:

Diese ganze Anordnung war für mich verwirrend, da TortoiseSVNs Terminologie (wie sie in ihrem Windows Explorer-Menüsystem verwendet wird) anfangs für mich irreführend war - ich war nicht sicher, welche Bedeutung die Menüs "Rekursiv hinzufügen", "Hinzufügen *" und "Hinzufügen" des Ignore-Menüs haben. Optionen. Ich hoffe, in diesem Beitrag wird erläutert, wie die Funktion Ignorieren in die Funktion SVN-Eigenschaften eingebunden wird. Das heißt, ich empfehle die Verwendung der Befehlszeile, um ignorierte Dateien festzulegen, so dass Sie ein Gefühl für die Funktionsweise erhalten, anstatt die GUI zu verwenden, und nur die GUI zum Bearbeiten von Eigenschaften verwenden, nachdem Sie mit der Befehlszeile vertraut sind.

Auflisten von Dateien, die ignoriert werden:

Mit dem Befehl svn status werden ignorierte Dateien ausgeblendet (dh Dateien, die einem RGA global-ignores-Muster entsprechen oder einem unmittelbaren svn:ignore-Muster des übergeordneten Verzeichnisses oder einem beliebigen svn:global-ignores-Muster eines Ancesor-Verzeichnisses entsprechen.

Verwenden Sie die Option --no-ignore, um diese Dateien anzuzeigen. Ignorierte Dateien haben den Status I, dann die Ausgabe an grep weiterleiten, um nur Zeilen anzuzeigen, die mit "I" beginnen.

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!

690
andyuk

Verwenden Sie den folgenden Befehl, um eine Liste zu erstellen, die nicht unter Versionskontrolldateien liegt.

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

Bearbeiten Sie dann die Datei in lassen Sie nur die Dateien, die Sie eigentlich ignorieren möchten. Verwenden Sie dann diese, um die in der Datei aufgelisteten Dateien zu ignorieren:

svn propset svn:ignore -F ignoring.txt .

Beachten Sie den Punkt am Ende der Zeile. Sie teilt SVN mit, dass die Eigenschaft für das aktuelle Verzeichnis festgelegt wird.

Löschen Sie die Datei:

rm ignoring.txt

Schließlich begehen,

svn ci --message "ignoring some files"

Sie können dann prüfen, welche Dateien ignoriert werden:

svn proplist -v
76
ulitosCoder

Wenn Sie TortoiseSVN verwenden, klicken Sie mit der rechten Maustaste auf eine Datei und wählen Sie TortoiseSVN/Zu Ignorierliste hinzufügen. Dadurch wird die Datei/Wildcard zur svn:ignore-Eigenschaft hinzugefügt.

svn:ignore wird beim Einchecken von Dateien geprüft und übereinstimmende Dateien werden ignoriert. Ich habe die folgende Ignorierliste für ein Visual Studio .NET-Projekt:

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

Sie finden diese Liste im Kontextmenü unter TortoiseSVN/Properties.

47
artur02

Sie können eine Datei oder ein Verzeichnis wie .gitignore ignorieren. Erstellen Sie einfach eine Textdatei mit einer Liste von Verzeichnissen/Dateien, die Sie ignorieren möchten, und führen Sie den folgenden Code aus:

svn propset svn:ignore -F ignorelist.txt .

ODER wenn Sie keine Textdatei verwenden möchten, können Sie dies folgendermaßen tun:

svn propset svn:ignore "first
 second
 third" .

Quelle: Karsten's Blog - Set svn: ignoriere für mehrere Dateien von der Kommandozeile aus

36
Adrian Enriquez

Ich habe den Artikel .svnignore Example für Java gefunden.

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 Ihren .svnignore verwenden

https://github.com/github/gitignore

21
d.danailov

Da scheint es niemand erwähnt zu haben ...

svn propedit svn:ignore .

Bearbeiten Sie dann den Inhalt der Datei, um die zu ignorierenden Muster anzugeben, und beenden Sie den Editor.

15
Yorick

Wenn Sie propedit verwenden, stellen Sie sicher, dass keine nachgestellten Leerzeichen vorhanden sind, da dies dazu führt, dass die Datei von der Ignorierliste ausgeschlossen wird.

Diese werden automatisch eingefügt, wenn Sie mit tab-autocomplete unter Linux die Datei erstellen, um mit zu beginnen:

svn propset svn:ignore 'file1
file2' .
10
Kenneth

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 zeilenweise

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 macht:

  1. Ruft die Statusdateien aus dem SVN ab
  2. Speichert alle Dateien mit? zur Datei "svnignore.txt"
  3. Ruft die bereits ignorierten Dateien ab und hängt sie an die Datei "svnignore.txt" an.
  4. Weist das svn an, die Dateien in "svnignore.txt" zu ignorieren
  5. Entfernt die Datei
8
bkbilly

Wenn Sie Tortoise SVN verwenden, können Sie Folgendes tun:

  1. Wählen Sie im Kontextmenü "TortoiseSVN" und dann "Eigenschaften".
  2. Klicken Sie im erscheinenden Fenster auf "Neu" und dann auf "Erweitert".
  3. Im erscheinenden Fenster gegenüber "Eigenschaftsname" wählen Sie "svn: ignore" aus, oder geben Sie den gewünschten Dateinamen oder Ordnernamen oder die Dateimaske (in meinem Fall "*/target") ein, klicken Sie auf "Übernehmen" Eigenschaft rekursiv "
  4. OK. OK.
  5. Verpflichten
7
msangel

Eine besser lesbare Version der Antwort von bkbilly:

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 macht:

  1. Ruft die Statusdateien aus dem SVN ab
  2. Speichert alle Dateien mit ? zur Datei "svnignore.txt"
  3. Ruft die bereits ignorierten Dateien ab und hängt sie an die Datei "svnignore.txt" an.
  4. Weist das svn an, die Dateien in "svnignore.txt" zu ignorieren
  5. Entfernt die Datei
5
LivingDust
  1. cD ~/.Unterversion
  2. konfig öffnen
  3. finde die Zeile wie 'global-ignores'
  4. set ignoriere den Dateityp wie folgt: global-ignores = * .o * .lo * .la * .al .libs * .so .so. [0-9] * .pyc * .pyo 88 * .rej ~ # #. # *. *. swp .DS_Store node_modules Ausgabe
4
范陆离

SVN ignore ist in TortoiseSVN einfach zu verwalten. Öffnen Sie TortoiseSVN und klicken Sie mit der rechten Maustaste auf das Dateimenü. Wählen Sie dann Hinzufügen, um die Liste zu ignorieren.

Dadurch werden die Dateien in die svn:ignore-Eigenschaft eingefügt. Wenn wir die Dateien einchecken, wird die Datei, die mit svn:ignore übereinstimmt, ignoriert und nicht festgeschrieben.

In Visual Studio-Projekt haben wir die folgenden Dateien zum Ignorieren hinzugefügt:

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

Wir verwalten den Quellcode auf SVN von Comparetrap mit dieser Methode erfolgreich

3
Slack

svn status sagt Ihnen, welche Dateien sich nicht im SVN befinden und was geändert wurde.

Schauen Sie sich die SVN-Eigenschaften für die Ignoriereigenschaft an.

Für alles, was SVN ist, muss das Red Book gelesen werden.

3
DGM

Sie können auch ein globales Ignoriermuster in der Konfigurationsdatei von SVN festlegen.

3
petr k.

Hinzufügen eines Verzeichnisses zu Subversion und Ignorieren des Verzeichnisinhalts

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

oder

svn propset svn:ignore '*' .
3
Al Conrad

Verwenden Sie den Befehl svn status in Ihrer Arbeitskopie, um den Status von Dateien anzuzeigen. Dateien, die noch nicht unter Versionskontrolle stehen (und nicht ignoriert werden), werden mit einem Fragezeichen versehen.

Um Dateien zu ignorieren, müssen Sie die svn: ignore -Eigenschaft bearbeiten. Lesen Sie dazu das Kapitel Unversioned Items ignorieren im svnbook unter http://svnbook.red-bean.com/de/1.5/svn.advanced.props.special. ignore.html . Das Buch beschreibt auch mehr über die Verwendung des SVN-Status.

2
  1. Öffnen Sie das JetBrains-Produkt (d. h. Pycharm).
  2. klicken Sie anschließend auf die Schaltfläche "Festschreiben" in der oberen Symbolleiste oder verwenden Sie die Tastenkombination "Strg + K" screenshot_toolbar
  3. verschieben Sie auf der Commit-Schnittstelle Ihre unerwünschten Dateien wie folgt in eine andere Änderungsliste .. /. screenshot_commit_change
  4. beim nächsten Mal können Sie nur eine Standardänderungsliste festlegen.
0
G. Googol