Cara .gitignore file secara rekursif


106

Saya mencoba menghindari pola berikut di .gitignorefile saya .

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

Kami sudah mencoba:

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

Namun ini tidak berhasil. Ini git di Windows. Apakah ada cara yang lebih ringkas untuk melakukan ini tanpa mengulanginya?


Jawaban:


116

Mulai git 1.8.2, ini:

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

Harus bekerja menurut jawaban ini . Ini juga berfungsi untuk saya di Windows 7 menggunakan Sourcetree 1.6.12.0 dan versi git yang diinstal (1.8.4-preview20130916).

Untuk mengabaikan setiap file dan folder di bawah direktori secara rekursif:

MyPrject/WebApp/Scripts/special/**

Bagaimana dengan sebelum git 1.8?
ashes999

1
Jika jawaban ini tidak berhasil (di Windows), tambahkan karakter /di awal. Contoh:/MyProject/WebApp/Scripts/special/**/*.js
batressc

3
Saya malu karena jawaban saya terus mendapatkan suara positif ketika secara harfiah merupakan tautan ke jawaban lain .
Sam

1
@puk: .gitignoredalam pertanyaan ini ada di root repo (direktori induk /Webapp).
lucid_dreamer

1
Jawaban Anda terlihat bagus tetapi tidak berhasil untuk saya di Windows 10 dengan git 1.9.1 karena mengabaikan semua file kecuali js dalam kasus berikut: (baris pertama) foo/bar/*/*(baris kedua) !foo/bar/**/*.jsIni hanya berfungsi untuk satu tingkat subdirektori, tetapi tidak secara rekursif.
LLL

19

Mengikuti halaman manual gitignore:

[...] git memperlakukan pola sebagai shell glob yang cocok untuk dikonsumsi oleh fnmatch (3) dengan flag FNM_PATHNAME: karakter pengganti dalam pola tidak akan cocok dengan / di nama jalur.

Jadi, ini jelas menunjukkan bahwa tidak ada cara untuk menentukan sejumlah direktori di antara dua string, seperti antara specialdan js.

Namun demikian, Anda dapat memiliki .gitignorefile per direktori, jadi mungkin dalam kasus Anda konten berikut

*.js

di tempat berikut

MyPrject/WebApp/Scripts/special/.gitignore

akan cukup?


Saya dulu punya MyPrject/WebApp/Scripts/special*.jsdan itu cocok MyPrject/WebApp/Scripts/specialfile.jsjuga MyPrject/WebApp/Scripts/special/a/b/c/file.js. Namun, untuk beberapa alasan perilaku tersebut telah berubah dan solusi saya saat ini adalah mencantumkan direktori secara individual. Saya menggunakan GitHub untuk Windows.
orad

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

9

Ini bekerja untuk saya di osx.

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

0

Coba jalankan git rm -r --cached MyPrject/WebApp/Scripts/special/ Direktori yang Anda sebutkan mungkin telah di-cache oleh git dan akan muncul di file yang tidak terlacak. Setelah mengosongkan cache, pastikan Anda telah menyebutkannya .gitignore.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.