Wie ignoriere ich Dateien in Subversion?
Und wie finde ich Dateien, die nicht unter Versionskontrolle stehen?
Wie ignoriere ich Dateien in Subversion?
Und wie finde ich Dateien, die nicht unter Versionskontrolle stehen?
(Diese Antwort wurde aktualisiert, um dem Verhalten von SVN 1.8 und 1.9 zu entsprechen)
Sie haben 2 Fragen:
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:
global-ignores
-Option:global-ignores
-Liste von anderen Benutzern nicht geteilt, und sie gilt für alle Repos, die Sie auf Ihrem Computer auschecken.C:\Users\{Sie}\AppData\Roaming\Subversion\config
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
sowohl in HKLM
als auch in HKCU
.~/.subversion/config
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.
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
:
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.
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!
Um ignorierte Dateien zu finden: svn status -u -v --no-ignore | grep "^I" | awk "{print \$2}"
Wenn Sie die Datei ./FolderA/FolderB/FileToIgnore ignorieren möchten, tun Sie dies aus Ihrem .-Ordner: svn propset svn:ignore "FileToIgnore" FolderA/FolderB/
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
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
Warum die Datei löschen? Behalte sie im Repository, falls du sie wieder erstellen/hinzufügen/entfernen musst.
Bitte beachten Sie, dass diese Lösung Dateien in Unterverzeichnissen nicht ignoriert (auch wenn sie in der Datei ignoring.txt auftauchen).
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
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)
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.
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.