Git ignorieren Ausnahme

326

Ich habe eine Gitignore-Datei, die Git dazu bringt, *.dllDateien zu ignorieren , und das ist eigentlich das Verhalten, das ich will. foo.dllWie kann ich dies jedoch erreichen, wenn ich eine Ausnahme möchte (dh festschreiben kann )?

Rundkrise
quelle
8
mögliche Kopie von Ausnahmen in .gitignore
Wallyk
fwiw, der Urvater der doppelten Antworten zu diesem Thema - eine, die Sie sich ansehen sollten - wäre wahrscheinlich, dass Make .gitignore alles außer ein paar Dateien ignoriert - sehr regelmäßige Aktivitäten und mehrere gute Antworten. Ich bin ein besonderer Fan dieser Antwort , die klar und gründlich erscheint.
Kay V

Antworten:

447

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.

Skilldrick
quelle
22
Siehe auch Antwortformular @Matiss Jurgelis - es ist eine wichtige Ergänzung
Dan
7
Kann ich die Ausnahme zum Gitignore meines Projekts und nicht zu meinem globalen Gitignore hinzufügen? Zum Beispiel, wenn ich alle DLLs in ein Verzeichnis aufnehmen wollte? Mein gitignore_global hat *.dlles und der gitignore meines Projekts hat es, !Libs/*.dllaber das scheint nicht zu funktionieren.
Joel Kinzel
1
@jkinz, du solltest es versuchen !Libs/**/*.dll.
Rosberg Linhares
@RosbergLinhares Oder !**/Libs/*.dllje nach Ordnerstruktur.
JAB
2
Danke, aber auf einem Mac hat das Hinzufügen des Kommentars in derselben Zeile wie der !foo.dllden Befehl ungültig gemacht. Wenn ich den Kommentar in einer separaten Zeile hinzufüge, funktioniert es.
Giacomo
260

Git ignoriert Ordner, wenn Sie schreiben:

/js

Es können jedoch keine Ausnahmen hinzugefügt werden, wenn Sie: !/js/jqueryoder !/js/jquery/oder!/js/jquery/*

Sie müssen schreiben:

/js/* 

und nur dann können Sie solche Unterordner ausnehmen

!/js/jquery
Matiss
quelle
43
Das ist sehr wichtig. Vielen Dank!
VisioN
3
Es sieht jedoch so aus, als könnten Sie keine verschachtelten Ordner hinzufügen, z. B. !/js/jquery/xyzlibwerden sie nicht ignoriert ...
Ignorant
2
Wie @Ignorant sagt, muss sich der Ordner, den Sie von der Ignorierregel "ausnehmen", am selben Speicherort befinden wie "*"
The Red Pea
3
so /js/*, !/js/jquery, /js/jquery/*, !/js/jquery/xyzlib? Fühlt sich wie eine ziemlich lustige Art an, es zu tun ...
Imperishable Night
Du hast mir wirklich geholfen.
Loyea
55

Sie können einfach git add -f path/to/foo.dll.

.gitignore ignoriert nur Dateien für das übliche Tracking und ähnliches git add .

Nils Riedemann
quelle
4
Nur für weitere Details, das -fsagt git, um das Hinzufügen dieser Datei im Repo zu erzwingen, da es es möglicherweise zuerst wegen Ihrer.gitignore
RPDeshaies
Was großartig ist, wenn Sie nur eine Datei haben, weniger nützlich, wenn Sie ein Muster benötigen
Liam
19

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

Simon Paarlberg
quelle
15

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.
Robert Munteanu
quelle
5

!foo.dll in .gitignore oder (jedes Mal!) git add -f foo.dll

Tobias Kienzler
quelle
4

Wenn Sie mit Visual Studio arbeiten und sich Ihre DLL zufällig in einem binOrdner 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 .gitignoreein 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.

DeanOC
quelle
2

Die Lösung hängt von der Beziehung zwischen der Git-Ignorierregel und der Ausnahmeregel ab:

  1. Dateien / Dateien auf derselben Ebene: Verwenden Sie die @ Skilldrick-Lösung .
  2. Ordner / Unterordner: Verwenden Sie die @ Matiss Jurgelis-Lösung .
  3. 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
    
Rosberg Linhares
quelle
1

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

Erfan
quelle
1
funktioniert das für irgendjemanden? scheint bei mir nicht zu funktionieren.
Ankur