720 Stimmen

Wie ignoriere ich Dateien in Subversion?

Wie ignoriere ich Dateien in Subversion?

Und wie finde ich Dateien, die nicht unter Versionskontrolle stehen?

810voto

andyuk Punkte 36182

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

Sie haben 2 Fragen:

Dateien als ignoriert markieren:

Mit "ignorierte Datei" meine ich, dass die Datei in Listen nicht auftauchen wird, nicht einmal als "nicht versioniert": Ihr SVN-Client wird so tun, als ob die Datei gar nicht existiert im Dateisystem.

Ignorierte Dateien werden durch ein "Dateimuster" spezifiziert. Die Syntax und das Format von Dateimustern sind in der Online-Dokumentation von SVN erklärt: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "Dateimuster in Subversion".

Ab Version 1.8 (Juni 2013) und später unterstützt Subversion 3 verschiedene Möglichkeiten, Dateimuster zu spezifizieren. Hier ist eine Zusammenfassung mit Beispielen:

1 - Runtime-Konfigurationsbereich - global-ignores-Option:

  • Dies ist eine clientseitige Einstellung, daher wird Ihre global-ignores-Liste von anderen Benutzern nicht geteilt, und sie gilt für alle Repos, die Sie auf Ihrem Computer auschecken.
  • Diese Einstellung ist in Ihrer Runtime-Konfigurationsbereichsdatei definiert:
    • Windows (dateibasiert) - C:\Users\{Sie}\AppData\Roaming\Subversion\config
    • Windows (registrierungsbasiert) - Software\Tigris.org\Subversion\Config\Miscellany\global-ignores sowohl in HKLM als auch in HKCU.
    • Linux/Unix - ~/.subversion/config

2 - Die svn:ignore-Eigenschaft, die auf Verzeichnisse (nicht auf Dateien) gesetzt wird:

  • Dies wird im Repo gespeichert, daher werden andere Benutzer die gleichen ignorierten Dateien haben. Ähnlich wie bei .gitignore.

  • svn:ignore wird auf Verzeichnisse angewendet und ist nicht rekursiv oder vererbt. Jede Datei oder unmittelbare Unterverzeichnis des übergeordneten Verzeichnisses, die mit dem Dateimuster übereinstimmt, wird ausgeschlossen.

  • Obwohl SVN 1.8 das Konzept der "vererbten Eigenschaften" hinzufügt, wird die svn:ignore-Eigenschaft selbst in nicht unmittelbaren Nachfolgeverzeichnissen ignoriert:

  • Deshalb muss ein Ignorierungsliste rekursiv angewendet werden mit svn propset svn:ignore . --recursive.

  • Ich habe festgestellt, dass die Befehlszeilensyntax gegen intuitiv ist.

3- Die svn:global-ignores-Eigenschaft. Erfordert SVN 1.8 (Juni 2013):

  • Dies ist ähnlich wie svn:ignore, verwendet jedoch SVN 1.8s Funktion "vererbte Eigenschaften".

  • Verglichen mit svn:ignore wird das Dateimuster automatisch in jedem Nachfolgeverzeichnis angewendet (nicht nur in unmittelbaren Unterverzeichnissen).

  • Führen derselben Befehlsfolge wie im vorherigen Beispiel aus, aber verwenden Sie stattdessen svn:global-ignores:

Für Benutzer von TortoiseSVN:

Diese gesamte Anordnung war für mich verwirrend, weil die Terminologie von TortoiseSVN (wie sie in ihrem Windows-Explorer-Menüsystem verwendet wird) mich anfangs in die Irre führte - ich war unsicher über die Bedeutung der Optionen im "Ignorieren"-Menü: "Rekursiv hinzufügen", "Hinzufügen *" und "Hinzufügen " Ich hoffe, dass dieser Beitrag erklärt, wie das Ignorieren-Feature mit dem SVN Properties-Feature zusammenhängt. Ich empfehle jedoch, die Befehlszeile zu verwenden, um ignorierte Dateien festzulegen, damit Sie ein Gefühl dafür bekommen, wie es funktioniert, anstatt die GUI zu verwenden, und verwenden Sie die GUI nur zum Bearbeiten von Eigenschaften, nachdem Sie mit der Befehlszeile vertraut sind.

Auflisten von ignorierten Dateien:

Der Befehl svn status wird ignorierte Dateien ausblenden (d.h. Dateien, die einem RCA global-ignores-Muster entsprechen, oder einem Muster des unmittelbaren übergeordneten Verzeichnisses svn:ignore entsprechen oder einem Muster des übergeordneten Verzeichnisses svn:global-ignores entsprechen.

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

Der Befehl lautet:

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

Zum Beispiel:

svn status
> ? foo                             # Eine nicht versionierte Datei
> M modifiedFile.txt                # Eine versionierte Datei, die geändert wurde

svn status --no-ignore
> ? foo                             # Eine nicht versionierte Datei
> I ignoreThis.txt                  # Eine Datei, die mit einem svn:ignore-Muster übereinstimmt
> M modifiedFile.txt                # Eine versionierte Datei, die geändert wurde

svn status --no-ignore | grep "^I"
> I ignoreThis.txt                  # Eine Datei, die mit einem svn:ignore-Muster übereinstimmt

Tada!

7 Stimmen

Um ignorierte Dateien zu finden: svn status -u -v --no-ignore | grep "^I" | awk "{print \$2}"

3 Stimmen

Wenn Sie die Datei ./FolderA/FolderB/FileToIgnore ignorieren möchten, tun Sie dies aus Ihrem .-Ordner: svn propset svn:ignore "FileToIgnore" FolderA/FolderB/

0 Stimmen

Vielen Dank. Beachten Sie, dass Sie in Ihren Awk-Programmen keine Escape-Zeichen benötigen, wenn Sie einfache Anführungszeichen verwenden (die dort häufig verwendet werden). Nur eine Kleinigkeit. :-D

98voto

ulitosCoder Punkte 1849

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

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

Bearbeiten Sie dann die Datei, um nur die Dateien zu belassen, die tatsächlich ignoriert werden sollen. Verwenden Sie dann diesen Befehl, um die in der Datei aufgelisteten Dateien zu ignorieren:

svn propset svn:ignore -F ignoring.txt .

Beachten Sie den Punkt am Ende der Zeile. Er teilt SVN mit, dass die Eigenschaft im aktuellen Verzeichnis gesetzt wird.

Löschen Sie die Datei:

rm ignoring.txt

Schließlich commiten Sie mit:

svn ci --message "ignoring some files"

Sie können dann überprüfen, welche Dateien ignoriert werden, indem Sie folgendes verwenden:

svn proplist -v

2 Stimmen

Schön. Eine kleine Verbesserung ist svn status | awk "/^?/ {print \$2}" > ignoring.txt.

5 Stimmen

Warum die Datei löschen? Behalte sie im Repository, falls du sie wieder erstellen/hinzufügen/entfernen musst.

0 Stimmen

Bitte beachten Sie, dass diese Lösung Dateien in Unterverzeichnissen nicht ignoriert (auch wenn sie in der Datei ignoring.txt auftauchen).

80voto

Adrian Enriquez Punkte 7584

.gitignore-ähnlicher Ansatz

Sie können eine Datei oder Verzeichnis wie .gitignore ignorieren. Erstellen Sie einfach eine Textdatei mit der Liste der Verzeichnisse/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 es so machen:

svn propset svn:ignore "erstes
 zweites
 drittes" .

Quelle: Karstens Blog - Set svn:ignore für mehrere Dateien über die Befehlszeile

5 Stimmen

Beachten Sie, dass Sie, wenn Sie später Ihre ignore-Datei ändern, den svn:ignore Befehl erneut ausführen müssen (siehe stackoverflow.com/a/58380306/189518)

51voto

artur02 Punkte 4401

Wenn Sie TortoiseSVN verwenden, klicken Sie mit der rechten Maustaste auf eine Datei und wählen Sie dann TortoiseSVN / Zur Ignore-Liste hinzufügen. Dadurch wird die Datei/das Wildcard dem svn:ignore-Eigenschaft hinzugefügt.

svn:ignore wird überprüft, wenn Sie Dateien einchecken, und übereinstimmende Dateien werden ignoriert. Ich habe die folgende Ignore-Liste für ein Visual Studio .NET-Projekt:

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

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

47voto

Yorick Punkte 713

Da anscheinend niemand erwähnt hat...

svn propedit svn:ignore .

Dann bearbeiten Sie den Inhalt der Datei, um die zu ignorierenden Muster anzugeben, beenden Sie den Editor und Sie sind fertig.

5 Stimmen

Diese Antwort war nützlich. In meinem Fall musste ich "." in das Unterverzeichnis der Datei ändern, die ich ignorieren wollte, und nur das Dateimuster angeben. Außerdem musste ich dies das erste Mal ausführen (ich bin auf einem Mac): export SVN_EDITOR="nano"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X