Ich habe eine Gitignore-Datei, die Git dazu bringt, *.dll
Dateien zu ignorieren , und das ist eigentlich das Verhalten, das ich will. foo.dll
Wie kann ich dies jedoch erreichen, wenn ich eine Ausnahme möchte (dh festschreiben kann )?
Ich habe eine Gitignore-Datei, die Git dazu bringt, *.dll
Dateien zu ignorieren , und das ist eigentlich das Verhalten, das ich will. foo.dll
Wie kann ich dies jedoch erreichen, wenn ich eine Ausnahme möchte (dh festschreiben kann )?
Antworten:
Verwenden:
*.dll #Exclude all dlls
!foo.dll #Except for foo.dll
Von Gitignore :
Ein optionales Präfix! was das Muster negiert; Alle übereinstimmenden Dateien, die von einem vorherigen Muster ausgeschlossen wurden, werden wieder aufgenommen. Wenn ein negiertes Muster übereinstimmt, überschreibt dies Musterquellen mit niedrigerer Priorität.
*.dll
es und der gitignore meines Projekts hat es, !Libs/*.dll
aber das scheint nicht zu funktionieren.
!Libs/**/*.dll
.
!**/Libs/*.dll
je nach Ordnerstruktur.
!foo.dll
den Befehl ungültig gemacht. Wenn ich den Kommentar in einer separaten Zeile hinzufüge, funktioniert es.
Git ignoriert Ordner, wenn Sie schreiben:
/js
Es können jedoch keine Ausnahmen hinzugefügt werden, wenn Sie:
!/js/jquery
oder !/js/jquery/
oder!/js/jquery/*
Sie müssen schreiben:
/js/*
und nur dann können Sie solche Unterordner ausnehmen
!/js/jquery
!/js/jquery/xyzlib
werden sie nicht ignoriert ...
/js/*
, !/js/jquery
, /js/jquery/*
, !/js/jquery/xyzlib
? Fühlt sich wie eine ziemlich lustige Art an, es zu tun ...
Sie können einfach git add -f path/to/foo.dll
.
.gitignore
ignoriert nur Dateien für das übliche Tracking und ähnliches git add .
-f
sagt git, um das Hinzufügen dieser Datei im Repo zu erzwingen, da es es möglicherweise zuerst wegen Ihrer.gitignore
Gehen Sie wie folgt vor, um alles in einem Verzeichnis, aber einige Unterverzeichnisse, auszuschließen:
wp-content/*
!wp-content/plugins/
!wp-content/themes/
Quelle: https://gist.github.com/444295
Fügen Sie einfach !
vor einer Ausschlussregel hinzu.
Laut der gitignore-Manpage :
Muster haben das folgende Format:
...
- Ein optionales Präfix! was das Muster negiert; Alle übereinstimmenden Dateien, die von einem vorherigen Muster ausgeschlossen wurden, werden wieder aufgenommen. Wenn ein negiertes Muster übereinstimmt, überschreibt dies Musterquellen mit niedrigerer Priorität.
!foo.dll
in .gitignore oder (jedes Mal!) git add -f foo.dll
Wenn Sie mit Visual Studio arbeiten und sich Ihre DLL zufällig in einem bin
Ordner befindet, müssen Sie eine Ausnahme für den jeweiligen Bin-Ordner selbst hinzufügen, bevor Sie die Ausnahme für die DLL-Datei hinzufügen können. Z.B
!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll
Dies liegt daran, dass die Standarddatei von Visual Studio .gitignore
ein Ignoriermuster für enthält[Bbin]/
Dieses Muster zappt alle Bin-Ordner (und folglich deren Inhalt), wodurch jeder Versuch, den Inhalt einzuschließen, überflüssig wird (da der Ordner selbst bereits ignoriert wird).
Ich konnte herausfinden, warum meine Datei nicht durch Ausführen ausgenommen wurde
git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll
aus einem Git Bash Fenster. Dies gab das [Bbin]/
Muster zurück.
Die Lösung hängt von der Beziehung zwischen der Git-Ignorierregel und der Ausnahmeregel ab:
Dateien / Dateien in verschiedenen Ebenen oder Dateien / Unterordner: Sie können dies tun:
*.suo
*.user
*.userosscache
*.sln.docstates
# ...
# Exceptions for entire subfolders
!SetupFiles/elasticsearch-5.0.0/**/*
!SetupFiles/filebeat-5.0.0-windows-x86_64/**/*
# Exceptions for files in different levels
!SetupFiles/kibana-5.0.0-windows-x86/**/*.suo
!SetupFiles/logstash-5.0.0/**/*.suo
Seit Git 2.7.0 berücksichtigt Git Ausnahmen. Aus den offiziellen Versionshinweisen:
- Lassen Sie ein späteres "! / Abc / def" ein früheres "/ abc" überschreiben, das in derselben .gitignore-Datei angezeigt wird, um das Ausdrücken von "alles im Verzeichnis / abc wird ignoriert, außer ..." zu vereinfachen.
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt