Come .gitignore dei file in modo ricorsivo


106

Sto cercando di evitare il seguente schema nel mio .gitignorefile.

MyPrject/WebApp/Scripts/special/*.js
MyPrject/WebApp/Scripts/special/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*/*/*/*.js

Abbiamo provato:

MyPrject/WebApp/Scripts/special/**.js
MyPrject/WebApp/Scripts/special/**/*.js

Questo però non ha funzionato. Questo è git su Windows. C'è un modo più conciso per farlo senza ripetere le cose?


Risposte:


116

A partire da git 1.8.2, questo:

MyPrject/WebApp/Scripts/special/**/*.js

Dovrebbe funzionare secondo questa risposta . Funziona anche per me in Windows 7 utilizzando Sourcetree 1.6.12.0 e la versione di git che installa (1.8.4-preview20130916).

Per gitignore ricorsivamente ogni file e cartella in una directory:

MyPrject/WebApp/Scripts/special/**

E prima di git 1.8?
ceneri999

1
Se questa risposta non funziona (su Windows), aggiungi il carattere /all'inizio. Esempio:/MyProject/WebApp/Scripts/special/**/*.js
batressc

3
Sono imbarazzato dal fatto che la mia risposta continui a ricevere voti positivi quando è letteralmente un collegamento a un'altra risposta.
Sam il

1
@puk: .gitignorein questa domanda si trovava nella radice del repository (directory principale di /Webapp).
lucid_dreamer

1
La tua risposta sembra buona ma non ha funzionato per me su Windows 10 con git 1.9.1 per ignorare tutti i file tranne js nel seguente caso: (prima riga) foo/bar/*/*(seconda riga) !foo/bar/**/*.jsHa funzionato solo per un livello di sottodirectory, ma non in modo ricorsivo.
LLL

19

Di seguito la pagina di manuale di gitignore:

[...] git tratta il pattern come un glob di shell adatto al consumo da fnmatch (3) con il flag FNM_PATHNAME: i caratteri jolly nel pattern non corrisponderanno a / nel pathname.

Quindi, questo significa chiaramente che non c'è modo di specificare una certa quantità di directory tra due stringhe, come tra speciale js.

Tuttavia, puoi avere un .gitignorefile per directory, quindi forse nel tuo caso il seguente contenuto

*.js

al seguente posto

MyPrject/WebApp/Scripts/special/.gitignore

sarebbe sufficiente?


Avevo MyPrject/WebApp/Scripts/special*.jse si abbinava MyPrject/WebApp/Scripts/specialfile.jsbene come MyPrject/WebApp/Scripts/special/a/b/c/file.js. Tuttavia, per qualche motivo il comportamento è cambiato e la mia soluzione attuale è elencare le directory individualmente. Sto usando GitHub per Windows.
orad

1
ad esempiofind MyPrject/WebApp/Scripts/special -type d -printf 'echo "*.js" >> %h/.gitignore\n git add %h/.gitignore\n' | sh
jthill

9

Questo funziona per me in OSX.

lib64/**/__pycache__/
lib/**/__pycache__/
*.py[cod]
.ipynb_checkpoints/
**/.ipynb_checkpoints/
.DS_Store
**/.DS_Store

0

Prova a eseguire la git rm -r --cached MyPrject/WebApp/Scripts/special/ tua directory menzionata potrebbe essere stata memorizzata nella cache da git e verrà visualizzata sui file non tracciati. Dopo aver svuotato la cache assicurati di averlo menzionato .gitignore.

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.