2009-06-09 13 views
18

Sto usando msysgit e ho una struttura di progetto che contiene molti bin/cartelle nell'albero. Usando il file .gitignore nella root del progetto ho bisogno di ignorare tutti i file .dll che si trovano all'interno di un bin/cartella in qualsiasi punto dell'albero del progetto. Ho provato "bin/*. Dll" ma non funziona, presumo che funzioni solo contro il bin/cartella nella root del progetto.Git - Ignora determinati file contenuti in cartelle specifiche

+0

io confermo "git add --dry-run * .dll" solo aggiungere dll non ignorato. Potresti pubblicare il contenuto del tuo file .gitignore? – VonC

+0

Hai ragione: '**/bin/*. Dll' funziona solo per 'x/bin/z.dll' (profondità 2), non 'x/y/bin/z.dll' (profondità 3). Guardando dentro ora. – VonC

+0

Non sono sicuro che il pattern gitignore supporti il ​​riconoscimento ricorsivo delle directory ... Ho modificato la mia risposta. – VonC

risposta

9

Aggiornamento agosto 2016 (sette anni più tardi, Git 2.9.3/Git 2.10)

**/bin/*.dll 

Questo funziona per qualsiasi profondità.


risposta Originale (2009, Git 1.6)

Hai provato:

**/bin/*.dll 

funziona con il mio msysgit1.6.3 (con un file .gitignore nella directory principale del Git spazio di lavoro).

In realtà quanto sopra ignorerebbe solo "x/bin/z.dll", non "x/y/bin/z.dll".

Un'altra sintassi potrebbe essere:

**/*/bin/*.dll 

Ma questo sarebbe solo ottenere la profondità 3, non la profondità 2!

Quindi, se non si dispone di troppi luogo dove * .dll deve essere ignorato, la soluzione più semplice sarebbe ancora un file locale .gitignore in queste directory 'bin' ...

o un insieme di direttiva per coprire le prime profondità principali:

bin/*.dll 
**/bin/*.dll 
**/*/bin/*.dll 
**/**/*/bin/*.dll 

e così via, tutto in un file .gitignore.

+0

Sto usando msysgit 1.6.3 anche se il pattern **/bin/*. dll non ha funzionato. Ho aggiunto quel pattern al mio .gitignore nella root e poi ho provato "git add --dry-run * .dll" dalla root e ha elencato i miei file .dll contenuti nel bin/folder dell'albero del mio progetto. –

13

Ho appena /bin nel mio file e sembra funzionare. Ignora l'intera cartella (al contrario dei file specifici in essa contenuti)

Ecco i contenuti completi fin d'ora (ancora in evoluzione).

.svn* 
obj/ 
bin/ 
*.suo 
*.user 
Log/ 
log/ 
*.db 
+0

Funziona. almeno per me. git versione 1.7.2.5 –

+0

sì. eccellente! funziona anche per me – gpol

0

*/bin ha lavorato per me

mi piacerebbe pensare che */bin/farebbe pure.

+0

che funziona solo alla profondità 1: http://www.kernel.org/pub/software/scm/git/docs/gitignore.html "jolly nel modello non corrisponderanno a/nel nome del percorso" – I82Much

+0

quindi cosa avrebbe funzionato? \*/bidone\*? Penso di averlo fatto più tardi ... per una directory diversa. – rball

14

Appena avuto un problema simile e realizzato: i file erano già stati aggiunti e archiviati in git.

Come riconoscere la differenza: Git non ha mostrato i file come "nuovi", ma come "modificati". Questo dettaglio mi è costato un bel po 'di tempo ...

Se questo è il problema, semplicemente "git rm" questi file e ricominciare da capo. All'improvviso, .gitignore inizia a funzionare come previsto.

+1

questo ha funzionato per me, ma è la cosa più stupida che ho dovuto fare coinvolgendo Git. – BryanGrimes

+0

git rm -f -r/percorso # per forzare e rimuovere una cartella. – tgkprog

4

.gitignore su Windows, non sembra funzionare. Sto usando msysgit v 1.7.6 beta, e semplicemente non funziona come dovrebbe per la pagina man di .gitignor. Ora, se copio il contenuto del mio file .gitignore nel file $ GIT_DIR/info/exclude, all'interno del repository, le cose funzionano.

Quindi, la rottura è che questo non viene replicato, ma è meglio di niente.

+0

Questo ha funzionato! Sto usando github per Windows –

Problemi correlati