git ignora l'eccezione


326

Ho un file gitignore che fa in modo che git ignori i *.dllfile e questo è in realtà il comportamento che desidero. Tuttavia, se desidero un'eccezione (ovvero essere in grado di impegnarmi foo.dll), come posso raggiungere questo obiettivo?


8
possibile duplicato di Eccezioni in
.gitignore

In fin dei conti, il nonno di risposte duplicate su questo argomento - uno che dovresti esaminare - probabilmente sarebbe Make .gitignore ignora tutto tranne alcuni file - attività molto regolari e diverse buone risposte. Sono un fan particolare di questa risposta , che sembra chiara e approfondita.
Kay V,

Risposte:


447

Uso:

*.dll    #Exclude all dlls
!foo.dll #Except for foo.dll

Da gitignore :

Un prefisso opzionale! che nega il modello; qualsiasi file corrispondente escluso da un modello precedente verrà nuovamente incluso. Se un modello negato corrisponde, questo sovrascriverà le origini dei modelli con precedenza inferiore.


22
Vedi anche il modulo di risposta @Matiss Jurgelis - è un'aggiunta importante
Dan

7
Posso aggiungere l'eccezione a gitignore del mio progetto e non a gitignore globale? Ad esempio, se volessi includere tutte le DLL in una directory? Il mio gitignore_global ha *.dllin esso, e il gitignore del mio progetto ha !Libs/*.dllma non sembra funzionare.
Joel Kinzel,

1
@jkinz, dovresti provare !Libs/**/*.dll.
Rosberg Linhares,

@RosbergLinhares Oppure !**/Libs/*.dll, a seconda della struttura delle cartelle.
JAB

2
Grazie, ma su un mac l'aggiunta del commento sulla stessa riga !foo.dllha invalidato il comando. Se aggiungo il commento su una riga separata, funziona.
Giacomo

261

Git ignora le cartelle se scrivi:

/js

ma non può aggiungere eccezioni se lo fai: !/js/jqueryoppure !/js/jquery/oppure!/js/jquery/*

Devi scrivere:

/js/* 

e solo allora puoi escludere le sottocartelle come questa

!/js/jquery

44
Questo è molto importante. Grazie!
VisioN,

3
Tuttavia sembra che non sia possibile aggiungere cartelle nidificate, ad esempio !/js/jquery/xyzlibnon verrà ignorato ...
Ignorante

2
Come dice @Ignorant, la cartella che "escludi" dalla regola ignora, deve trovarsi nella stessa posizione del "*"
The Red Pea,

3
così /js/*, !/js/jquery, /js/jquery/*, !/js/jquery/xyzlib? Sembra un modo piuttosto divertente per farlo ...
Imperishable Night,

mi hai davvero aiutato.
Loyea,

55

Puoi semplicemente git add -f path/to/foo.dll.

.gitignore ignora solo i file per il normale tracciamento e cose del genere git add .


4
Solo per maggiori dettagli, -fdice a git di forzare l'aggiunta di questo file nel repository poiché potrebbe ignorarlo per primo a causa del tuo.gitignore
RPDeshaies

Il che è fantastico se hai solo un file, meno utile se hai bisogno di un modello
Liam


15

Basta aggiungere !prima di una regola di esclusione.

Secondo la pagina man di gitignore :

I motivi hanno il seguente formato:

...

  • Un prefisso opzionale! che nega il modello; qualsiasi file corrispondente escluso da un modello precedente verrà nuovamente incluso. Se un modello negato corrisponde, questo sovrascriverà le origini dei modelli con precedenza inferiore.


4

Se stai lavorando con Visual Studio e il tuo .dll si trova in una bincartella, dovrai aggiungere un'eccezione per la cartella bin stessa, prima di poter aggiungere l'eccezione per il file .dll. Per esempio

!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll

Questo perché il file di Visual Studio predefinito .gitignoreinclude un modello ignore per[Bbin]/

Questo modello sta zappando tutte le cartelle bin (e di conseguenza il loro contenuto), il che rende ogni tentativo di includere il contenuto ridondante (poiché la cartella stessa è già ignorata).

Sono stato in grado di scoprire perché il mio file non veniva escluso correndo

git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll

da una finestra di Git Bash. Questo ha restituito il [Bbin]/modello.


2

La soluzione dipende dalla relazione tra la regola git ignore e la regola di eccezione:

  1. File / File allo stesso livello: utilizzare la soluzione @Skilldrick .
  2. Cartelle / sottocartelle: utilizzare la soluzione @Matiss Jurgelis .
  3. File / File in diversi livelli o File / Sottocartelle: puoi farlo:

    *.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
    

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.