Ho un file gitignore che fa in modo che git ignori i *.dll
file 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?
Ho un file gitignore che fa in modo che git ignori i *.dll
file 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?
Risposte:
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.
*.dll
in esso, e il gitignore del mio progetto ha !Libs/*.dll
ma non sembra funzionare.
!Libs/**/*.dll
.
!**/Libs/*.dll
, a seconda della struttura delle cartelle.
!foo.dll
ha invalidato il comando. Se aggiungo il commento su una riga separata, funziona.
Git ignora le cartelle se scrivi:
/js
ma non può aggiungere eccezioni se lo fai:
!/js/jquery
oppure !/js/jquery/
oppure!/js/jquery/*
Devi scrivere:
/js/*
e solo allora puoi escludere le sottocartelle come questa
!/js/jquery
!/js/jquery/xyzlib
non verrà ignorato ...
/js/*
, !/js/jquery
, /js/jquery/*
, !/js/jquery/xyzlib
? Sembra un modo piuttosto divertente per farlo ...
Puoi semplicemente git add -f path/to/foo.dll
.
.gitignore
ignora solo i file per il normale tracciamento e cose del genere git add .
-f
dice a git di forzare l'aggiunta di questo file nel repository poiché potrebbe ignorarlo per primo a causa del tuo.gitignore
Per escludere tutto in una directory, ma alcune sottodirectory, procedi come segue:
wp-content/*
!wp-content/plugins/
!wp-content/themes/
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.
!foo.dll
in .gitignore o (ogni volta!) git add -f foo.dll
Se stai lavorando con Visual Studio e il tuo .dll si trova in una bin
cartella, 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 .gitignore
include 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.
La soluzione dipende dalla relazione tra la regola git ignore e la regola di eccezione:
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
Dal momento che Git 2.7.0 Git terrà conto delle eccezioni. Dalle note di rilascio ufficiali:
- Consenti a un successivo "! / Abc / def" di sovrascrivere un precedente "/ abc" che appare nello stesso file .gitignore per facilitare l'espressione "tutto viene ignorato nella directory / abc, ad eccezione di ...".
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt