.Gitignore dosyaları yinelemeli olarak nasıl yapılır


106

Dosyamda aşağıdaki örüntüden kaçınmaya çalışıyorum .gitignore.

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

Biz denedik:

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

Ancak bu işe yaramadı. Bu Windows'ta git. Bir şeyleri tekrar etmeden bunu yapmanın daha kısa bir yolu var mı?


Yanıtlar:


118

1.8.2 sürümünden itibaren bu:

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

Bu cevaba göre çalışmalı . Ayrıca Sourcetree 1.6.12.0 ve yüklediği git sürümünü (1.8.4-preview20130916) kullanan Windows 7'de de benim için çalışıyor.

Bir dizinin altındaki her dosya ve klasörü yinelemeli olarak gitignore etmek için:

MyPrject/WebApp/Scripts/special/**

Git 1.8'den önce ne olacak?
ashes999

1
Bu cevap işe yaramazsa (Windows'ta), /başlangıca karakteri ekleyin . Örnek:/MyProject/WebApp/Scripts/special/**/*.js
batressc

3
Kelimenin tam anlamıyla başka bir cevaba bağlantı olduğunda cevabımın sürekli yükselen oylar almasından utanıyorum .
Sam

1
@puk: .gitignorebu sorudaki soru repo kökündeydi (ana dizini /Webapp).
lucid_dreamer

1
Cevabınız iyi görünüyor, ancak aşağıdaki durumda js dışındaki tüm dosyaları yok saymak için git 1.9.1 ile Windows 10'da benim için işe yaramadı: (birinci satır) foo/bar/*/*(ikinci satır) !foo/bar/**/*.jsYalnızca bir alt dizin düzeyi için çalıştı, ancak yinelemeli olarak çalışmadı.
HBÖ

19

Gitignore kılavuz sayfasından sonra:

[...] git, kalıbı fnmatch (3) tarafından FNM_PATHNAME bayrağıyla tüketime uygun bir kabuk glob olarak ele alır: kalıptaki joker karakterler yol adındaki / ile eşleşmez.

Yani, bu açıkça anlaşılıyor ki, iki dizge arasında ve arasında olduğu gibi belirli bir miktarda dizin belirtmenin bir yolu yok .specialjs

Yine de, .gitignoreher dizin için bir dosyanız olabilir , bu nedenle belki sizin durumunuzda aşağıdaki içerik

*.js

aşağıdaki yerde

MyPrject/WebApp/Scripts/special/.gitignore

yeterli olur mu?


Eskiden yaşadığım MyPrject/WebApp/Scripts/special*.jsve eşleşti MyPrject/WebApp/Scripts/specialfile.jsyanı sıra MyPrject/WebApp/Scripts/special/a/b/c/file.js. Ancak, bazı nedenlerden dolayı davranış değişti ve benim mevcut çözümüm dizinleri ayrı ayrı listelemektir. Windows için GitHub kullanıyorum.
orad

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

11

Bu benim için osx'te çalışıyor.

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

1

git rm -r --cached MyPrject/WebApp/Scripts/special/ Belirtilen dizini çalıştırmayı deneyin , git tarafından önbelleğe alınmış olabilir ve izlenmeyen dosyalarda görünecektir. Önbelleği temizledikten sonra, üzerinde bahsettiğinizden emin olun .gitignore.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.