Come dice il titolo, è possibile aggiungere "file senza punti" al file gitignore?
Immagino che questo si occupi di tutti quei fastidiosi file senza estensione.
Come dice il titolo, è possibile aggiungere "file senza punti" al file gitignore?
Immagino che questo si occupi di tutti quei fastidiosi file senza estensione.
Risposte:
Puoi provare una combinazione simile a:
*
!/**/
!*.*
Quella gitignore
regola di esclusione (un pattern negato ) dovrebbe ignorare tutti i file, tranne quelli con estensione.
Come indicato di seguito da Mad Physicist , la regola è:
Non è possibile includere nuovamente un file se una directory principale di quel file è esclusa. (*
)
(*
: a meno che non siano soddisfatte determinate condizioni in git 2.?+, vedi sotto)
Questo è il motivo per cui !/**/
è importante (inserire in white list le cartelle principali in modo ricorsivo) se vogliamo inserire i file in white list.
Ho menzionato la stessa regola in casi simili come:
Come commenta Jakub Narębski , potresti non voler ignorare tutti i file senza estensione.
Il mio consiglio:
.gitignore
come mostrato sopra: i file già con versione non verranno ignorati (anche se non hanno un'estensione). Tutti gli altri verranno ignorati.Per qualsiasi futuro file senza estensione di cui vorresti avere una versione:
git add -f -- myFile
Si noti che con git 2.9.x / 2.10 (metà 2016?), Potrebbe essere possibile includere nuovamente un file se una directory padre di quel file viene esclusa se non sono presenti caratteri jolly nel percorso reincluso .
Nguyễn Thái Ngọc Duy ( pclouds
) sta cercando di aggiungere questa funzione:
Tuttavia, poiché una delle regole per la reinclusione era:
La parte della directory nelle regole di reinclusione deve essere letterale (cioè nessun carattere jolly)
Comunque qui non avrebbe funzionato.
.gitignore
sarebbe meglio **
e !**.*
. So che questo non fa differenza se l'asterisco è posizionato davanti, ma è più esplicito e
!Makefile
. Attenzione che ho riscontrato problemi con questa soluzione in Git 1.7.1 mentre funzionava bene in 1.9.0. Nel mio caso l'aggiunta di un file nella directory principale ha funzionato bene, ma l'aggiunta di un file con un'estensione all'interno di una sottodirectory è stata mostrata come ignorata. Questo sembra essere dovuto al fatto che 1.7.1 non supportava **
ancora il pattern, guarda qui !
**
è stato aggiunto in Git 1.8.2
. C'è qualche svantaggio rispetto all'uso al !*/
posto di !/**/
?
*
!*/
!*.*
*
dice a git di ignorare tutto.
!*/
quindi non ignora tutto ciò che è una directory. Questo è fondamentale.
!*.*
annulla tutti i file con estensione.
Senza la !*/
regola, le directory senza un .
nel nome non sarebbero elencate e nessuno dei file desiderati sarebbe aggiunto al di fuori della cartella principale.
Per riferimento, leggi queste due sezioni nella documentazione di .gitignore che si distinguono:
Un prefisso opzionale "!" che nega il pattern; qualsiasi file corrispondente escluso da un modello precedente verrà nuovamente incluso. Non è possibile includere nuovamente un file se una directory principale di quel file è esclusa. Git non elenca le directory escluse per motivi di prestazioni, quindi qualsiasi modello sui file contenuti non ha effetto, indipendentemente da dove siano definiti. Metti una barra rovesciata ("\") davanti al primo "!" per i modelli che iniziano con un letterale "!", ad esempio, "! important! .txt".
Se il pattern termina con una barra, viene rimosso ai fini della seguente descrizione, ma troverà solo una corrispondenza con una directory. In altre parole, foo / corrisponderà a una directory foo e ai percorsi sottostanti, ma non corrisponderà a un file normale oa un collegamento simbolico foo (questo è coerente con il modo in cui pathspec funziona in generale in Git).
Nelle mie cartelle ci sono molti file con *.c, *.h, *.txt, *.csv
estensioni ecc. E file binari senza alcuna estensione. Quindi avevo bisogno di ignorare tutti i file eseguiti *.c,*.h
e .gitignore
, quindi questo funziona per me, .gitignore
dall'esempio:
*/* #ignore all files in each directory
!*/*.c #unignore .c files in each directory
!*/*.h #unignore .h header files in each directory
!.gitignore #unignore .gitignore
README
,LICENSE
oCOPYING
,INSTALL
,Makefile
ecc, loro però si può sempre forzare-aggiungono e poi sono seguiti