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 )?


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.


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

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 .


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


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.


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.


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
    

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


1
funktioniert das für irgendjemanden? scheint bei mir nicht zu funktionieren.
Ankur
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.