Wie ignoriere ich Dateien in Subversion?
Wie finde ich auch Dateien, die nicht der Versionskontrolle unterliegen?
Wie ignoriere ich Dateien in Subversion?
Wie finde ich auch Dateien, die nicht der Versionskontrolle unterliegen?
Antworten:
(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 auch in "nicht versioniert" nicht 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 werden in der Online-Dokumentation von SVN erläutert: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html "Dateimuster in Subversion".
Subversion ab Version 1.8 (Juni 2013) und höher unterstützt drei verschiedene Arten der Angabe von Dateimustern. Hier ist eine Zusammenfassung mit Beispielen:
global-ignores
Option:global-ignores
Liste nicht von anderen Benutzern freigegeben wird. Sie gilt für alle Repos, die Sie auf Ihrem Computer auschecken.C:\Users\{you}\AppData\Roaming\Subversion\config
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
sowohl in HKLM
als auch HKCU
.~/.subversion/config
svn:ignore
Eigenschaft, die für Verzeichnisse (nicht für Dateien) festgelegt ist:.gitignore
funktioniert.svn:ignore
wird auf Verzeichnisse angewendet und ist nicht rekursiv oder vererbt. Alle Dateien oder unmittelbaren 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 unmittelbaren Nachkommenverzeichnissen 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 das .
Repo-Stammverzeichnis angewendet wird ).
Um eine Ignorierliste rekursiv anzuwenden, müssen Sie sie daher verwenden svn propset svn:ignore <filePattern> . --recursive
.
<filePattern>
Wert in einem untergeordneten Verzeichnis unterscheidet, überschreibt der Wert des untergeordneten Elements die übergeordneten Elemente vollständig, sodass kein "additiver" Effekt auftritt.<filePattern>
im Stammverzeichnis .
ändern, müssen Sie es mit ändern, --recursive
um es im untergeordneten Verzeichnis und im untergeordneten Verzeichnis zu überschreiben.Ich stelle fest, dass die Befehlszeilensyntax nicht intuitiv ist.
svn ignore pathToFileToIgnore.txt
aber so funktioniert die Ignorierfunktion von SVN nicht.svn:global-ignores
Eigenschaft. Benötigt SVN 1.8 (Juni 2013):svn:ignore
, außer dass die Funktion "geerbte Eigenschaften" von SVN 1.8 verwendet wird.svn:ignore
wird das Dateimuster automatisch in jedem untergeordneten Verzeichnis angewendet (nicht nur in unmittelbaren untergeordneten Verzeichnissen).
svn:global-ignores
mit dem --recursive
Flag nicht erforderlich ist, da geerbte Ignorierdateimuster automatisch angewendet werden, wenn sie geerbt werden.Ausführen des gleichen Befehlssatzes wie im vorherigen Beispiel, jedoch svn:global-ignores
stattdessen:
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!
Diese ganze Anordnung war für mich verwirrend, da die Terminologie von TortoiseSVN (wie sie in ihrem Windows Explorer-Menüsystem verwendet wird) mich anfangs irreführte - ich war mir nicht sicher, welche Bedeutung die "Rekursiv hinzufügen", "Hinzufügen *" und "Hinzufügen" des Menüs "Ignorieren" hatten. Optionen. Ich hoffe, dieser Beitrag erklärt, wie die Funktion "Ignorieren" mit der Funktion "SVN-Eigenschaften" verknüpft ist. Trotzdem schlage ich vor, 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 die GUI nur zum Bearbeiten von Eigenschaften zu verwenden, nachdem Sie mit der Befehlszeile vertraut sind.
Der Befehl svn status
blendet ignorierte Dateien aus (d. H. Dateien, die einem RGA- global-ignores
Muster oder dem svn:ignore
Muster eines unmittelbaren übergeordneten Verzeichnisses oder dem Muster eines Ancesor-Verzeichnisses entsprechen svn:global-ignores
.
Verwenden Sie die --no-ignore
Option, um die aufgelisteten Dateien anzuzeigen. Ignorierte Dateien haben den Status von I
und leiten die Ausgabe an weiter, grep
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!
svn propedit svn:ignore .
und kein Texteditor konfiguriert ist, wird die Fehlermeldung svn angezeigt: E205007: Keine der Umgebungsvariablen SVN_EDITOR, VISUAL oder EDITOR ist festgelegt, und es wurde keine Laufzeitkonfigurationsoption 'editor-cmd' verwendet gefunden, anstatt einen Editor zu öffnen. Geben Sie einfach --editor-cmd nano wie folgt ansvn propedit svn:ignore . --editor-cmd nano
svn status | grep '^?'
Verwenden Sie den folgenden Befehl, um eine Liste zu erstellen, die sich nicht unter Versionskontrolldateien befindet.
svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt
Bearbeiten Sie dann die Datei so, dass nur die Dateien übrig bleiben, die Sie tatsächlich ignorieren möchten . Verwenden Sie diese Option, um die in der Datei aufgeführten Dateien zu ignorieren:
svn propset svn:ignore -F ignoring.txt .
Beachten Sie den Punkt am Ende der Zeile. Es teilt SVN mit, dass die Eigenschaft im aktuellen Verzeichnis festgelegt wird.
Löschen Sie die Datei:
rm ignoring.txt
Schließlich verpflichten,
svn ci --message "ignoring some files"
Sie können dann überprüfen, welche Dateien ignoriert werden über:
svn proplist -v
svn status | awk "/^?/ {print \$2}" > ignoring.txt
.
svn pg svn:ignore . >> ignore.txt
Nach dem ersten Befehl zum Anhängen der aktuellen Ignorierungen an die Datei.
Sie können eine Datei oder ein Verzeichnis wie .gitignore ignorieren. Erstellen Sie einfach eine Textdatei mit einer 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 dies folgendermaßen tun:
svn propset svn:ignore "first
second
third" .
Quelle: Karstens Blog - Svn festlegen: Für mehrere Dateien über die Befehlszeile ignorieren
svn:ignore
Befehl erneut ausführen müssen, wenn Sie Ihre Ignorierdatei später ändern (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 / Hinzufügen, um die Liste zu ignorieren . Dadurch wird die Datei / der Platzhalter zur svn:ignore
Eigenschaft hinzugefügt .
svn:ignore
wird beim Einchecken von Dateien überprü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 .
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, beenden Sie den Editor und Sie sind fertig.
Ich habe den Artikel .svnignore Beispiel 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
Stellen Sie bei der Verwendung von propedit 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 unter Linux Tab-Autocomplete verwenden, um die Datei zunächst zu erstellen:
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 macht:
Wenn Sie Tortoise SVN verwenden, können Sie Folgendes tun:
config
Datei erwähnt.
Eine besser lesbare Version von bkbillys 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 macht:
Sie können auch ein globales Ignoriermuster in der SVN-Konfigurationsdatei festlegen.
svn status
Hier erfahren Sie, welche Dateien nicht in SVN enthalten sind und was geändert wurde.
Sehen Sie sich die SVN-Eigenschaften für die Ignorier-Eigenschaft an.
Für alle SVN-Dinge muss das Rote Buch gelesen werden.
Hinzufügen eines Verzeichnisses zur Subversion und Ignorieren des Verzeichnisinhalts
svn propset svn:ignore '\*.*' .
oder
svn propset svn:ignore '*' .
Verwenden Sie den Befehl svn status auf Ihrer Arbeitskopie, um den Status von Dateien anzuzeigen. Dateien, die noch nicht der Versionskontrolle unterliegen (und nicht ignoriert werden), werden mit einem Fragezeichen versehen.
Informationen zum Ignorieren von Dateien zum Bearbeiten der Eigenschaft svn: ignore finden Sie im Kapitel Ignorieren nicht versionierter Elemente 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.
SVN ignore
ist in TortoiseSVN einfach zu verwalten. Öffnen Sie TortoiseSVN, klicken Sie mit der rechten Maustaste auf das Dateimenü und wählen Sie Hinzufügen, um die Liste zu ignorieren.
Dadurch werden die Dateien in der svn:ignore
Eigenschaft hinzugefügt . Wenn wir die Dateien einchecken, werden die Dateien, die damit übereinstimmen svn:ignore
, ignoriert und nicht festgeschrieben.
Im Visual Studio-Projekt haben wir folgende Dateien hinzugefügt, die ignoriert werden sollen:
bin obj
*.exe
*.dll
*.pdb
*.suo
Wir verwalten den Quellcode auf SVN von Comparetrap mit dieser Methode erfolgreich
Was hat bei mir funktioniert:
Wie ignoriere ich Dateien in Subversion?
1.Klicken Sie im Datei-Explorer mit der rechten
Maustaste auf den Ordnernamen des SVN-Projekts. 2.Klicken Sie auf "SVN - Festschreibung ...".
3.Ein Fenster "
Festschreiben " wird angezeigt. 4.Klicken Sie mit der rechten Maustaste auf den Ordner / die Datei, die Sie ignorieren möchten
5.Klicken Sie auf Hinzufügen, um die Liste zu ignorieren.
6.Wählen Sie den Ordner / die Datei.
7. Übernehmen Sie die "Eigenschaftsänderung" in SVN
Wie finde ich auch Dateien, die nicht der Versionskontrolle unterliegen?
Klicken Sie nach Schritt 3 oben auf "Nicht versionierte Dateien anzeigen".