ignorando qualsiasi directory ‘bin’ su un progetto git

Ho una struttura di directory come questa:

.git/ .gitignore main/ ... tools/ ... ... 

All’interno di main e tools, e qualsiasi altra directory, a qualsiasi livello, può esserci una directory ‘bin’, che voglio ignorare (e voglio ignorare anche tutto sotto). Ho provato ognuno di questi modelli in .gitignore ma nessuno di essi funziona:

 /**/bin/**/* /./**/bin/**/* ./**/bin/**/* **/bin/**/* */bin/**/* bin/**/* /**/bin/* #and the others with just * at the end too 

Qualcuno mi può aiutare? Il primo modello (quello che penso dovrebbe funzionare) funziona bene se faccio questo:

 /main/**/bin/**/* 

Ma non voglio avere una voce per ogni directory di primo livello e non voglio dover modificare .gitignore ogni volta che ne aggiungo uno nuovo.

Questo è su Windows usando l’ultimo msysgit.

EDIT: ancora una cosa, ci sono file e directory che hanno la sottostringa ‘bin’ nei loro nomi, non voglio che siano ignorati 🙂

Prima della versione 1.8.2, ** non aveva alcun significato speciale in .gitignore . A partire da 1.8.2 git supporta ** per indicare zero o più sottodirectory (vedere le note di rilascio ).

Il modo per ignorare tutte le directory chiamate bin ovunque sotto il livello corrente in un albero di directory è con un file .gitignore con lo schema:

 bin/ 

Nella pagina man , c’è un esempio di ignorare una directory chiamata foo usando un modello analogo.

Modifica: se nel tuo indice git sono già presenti cartelle bin che non desideri più tracciare, devi rimuoverle esplicitamente. Git non fermerà i percorsi di tracciamento che sono già stati tracciati solo perché ora corrispondono a un nuovo pattern .gitignore . Esegui una cartella remove ( rm ) solo dall’indice ( –cached ) recursivelly ( -r ). Esempio di riga di comando per la cartella bin root:

 git rm -r --cached bin 

Il .gitignore del tuo sogno sembra essere:

 bin/ 

al livello superiore.

Penso che valga la pena menzionare per i principianti git:

Se hai già archiviato un file e vuoi ignorarlo, Git non ignorerà il file se aggiungi una regola in un secondo momento . In questi casi, devi prima srotolare il file, eseguendo il seguente comando nel tuo terminale:

git rm --cached

Quindi, se vuoi aggiungere per ignorare alcune directory nel tuo repository locale (che già esistono) dopo aver modificato .gitignore, devi eseguirlo nella tua directory principale

 git rm --cached -r . git add . 

Fonderà fondamentalmente il tuo repository locale e non rilascerà file ignorati.

Vedere:

http://git-scm.com/docs/git-rm ,

https://help.github.com/articles/ignoring-files/

Il ** non ha funzionato correttamente prima, ma da git 1.8.2 (8 marzo 2013) , sembra essere esplicitamente menzionato e supportato:

Gli schemi nei file .gitattributes e .gitattributes possono avere **/ , come un modello che corrisponde a 0 o più livelli di sottodirectory .

Ad esempio ” foo/**/bar ” corrisponde a ” bar ” in ” foo ” stesso o in una sottodirectory di ” foo “.

Nel tuo caso, questo significa che ora questa linea potrebbe essere supportata:

 /main/**/bin/ 
 [Bb]in/ 

corrisponde a lettere maiuscole e minuscole

Non l’ho visto menzionato qui, ma questo sembra essere case sensitive. Una volta cambiato in / Bin i file sono stati ignorati come previsto.

[Bb]in risolverà il problema, ma … Ecco un elenco più ampio di cose che dovresti ignorare (elenco di esempio di GitExtension):

 #ignore thumbnails created by windows Thumbs.db #Ignore files build by Visual Studio *.user *.aps *.pch *.vspscc *_i.c *_p.c *.ncb *.suo *.bak *.cache *.ilk *.log [Bb]in [Dd]ebug*/ *.sbr obj/ [Rr]elease*/ _ReSharper*/ 

Se stai cercando un grande file .gitignore globale per qualsiasi soluzione di Visual Studio (.NET), ti consiglio di utilizzare questo file: https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

AFAIK ha il più completo .gitignore per progetti .NET.

Come avviso

Se pensi a .gitignore non funziona in alcun modo (quindi ha aggiunto la cartella foo/* , ma lo git status mostra ancora quel contenuto della cartella come modificato o qualcosa del genere), allora puoi usare questo comando;

git checkout -- foo/*

Passaggio 1: aggiungi il seguente contenuto al file .gitignore.

 # User-specific files *.suo *.user *.userosscache *.sln.docstates # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ bld/ [Bb]in/ [Oo]bj/ # Visual Studio 2015 cache/options directory .vs/ 

per 2.13.3 e successivi, scrivere solo bin nel file .gitignore dovrebbe ignorare il cestino e tutte le sue sottodirectory e file

bidone

L’aggiunta di ** / bin / al file .gitignore ha fatto il trucco per me (Nota: la cartella bin non è stata aggiunta all’indice).

Letteralmente nessuna delle risposte ha funzionato per me; l’unico che ha funzionato per me è stato (su Linux):

 **/bin (yes without the / in the end) git version 2.18.0