Yanıtlar:
Hiç denemedim ama git help ignore
bir koyarsanız düşündürmektedir .gitignore
ile *.js
de /public/static
, bu ne istediğini yapacağız.
Not: Aşağıdaki Joeys'in cevabını da kontrol ettiğinizden emin olun: belirli bir alt dizindeki dosyaları yoksaymak istiyorsanız, yerel bir .gitignore doğru çözümdür (yerellik iyidir). Ancak tüm deponuza uygulamak için aynı desene ihtiyacınız varsa, ** çözüm daha iyidir.
**
Sözdiziminin dokümantasyona göre git
sürüm itibariyle desteklendiği anlaşılmaktadır .1.8.2.1
**
Tam yol adına karşılık gelen desenlerde art arda iki yıldız (" ") özel bir anlama sahip olabilir:
Başında bir "
**
" ve ardından eğik çizgi tüm dizinlerde eşleşme anlamına gelir. Örneğin, "**/foo
" dosya veya dizini "foo
" herhangi bir yerde, "foo
" deseniyle aynı şekilde eşleştirir . "**/foo/bar
"bar
, doğrudan dosya " " altındaki herhangi bir yerde " " dosya veya dizini ile eşleşiyorfoo
.Sondaki "
/**
" içindeki her şeye uyuyor. Örneğin, "abc/**
" dizinin içindeki tüm dosyaları dosyanınabc
konumuna göre.gitignore
sonsuz derinlikle eşleştirir .Bir eğik çizgi ve ardından art arda iki yıldız, ardından bir eğik çizgi sıfır veya daha fazla dizinle eşleşir. Örneğin, "
a/**/b
" , " "a/b
, "a/x/b
", "a/x/y/b
" vb. İle eşleşir .Ardışık diğer yıldız işaretleri geçersiz kabul edilir.
xxx/**
ve arasındaki fark xxx/
nedir?
xxx/**
hedefler tüm dosyaları ve dizinleri içinde xxx
oysa xxx/
hedefleri xxx
dizini doğrudan. Bu gerçekten sadece !
"Bu dosyanın üst dizini hariç tutulursa bir dosyayı yeniden eklemek mümkün değildir." Şeklinde kalıpları reddetirken önemlidir , bu nedenle bu durumda kullanmak xxx/*
veya kullanmak xxx/**
gerekir.
**.js
?
GÜNCELLEME: @ Joey'nin cevabına bir göz atın : Git artık **
kalıplardaki sözdizimini destekliyor . Her iki yaklaşım da iyi çalışmalıdır.
Gitignore (5) kılavuz sayfasına durumları:
Yolla aynı dizindeki veya herhangi bir üst dizindeki bir .gitignore dosyasından okunan desenler, daha üst düzey dosyalardaki (çalışma ağacının en üst düzeyine kadar) desenler dizine kadar alt düzey dosyalardakiler tarafından geçersiz kılınır dosyayı içeren.
Bunun anlamı, repo'nuzun .gitignore
herhangi bir dizinindeki bir dosyadaki desenlerin o dizini ve tüm alt dizinleri etkileyeceğidir .
Sağladığınız desen
/public/static/**/*.js
tam olarak doğru değil, çünkü (doğru bir şekilde belirttiğiniz gibi) **
sözdizimi Git tarafından kullanılmıyor. Ayrıca, önde gelen bu yolu yol /
adının başına bağlar. (Yani, /public/static/*.js
maç olacak /public/static/foo.js
ama değil /public/static/foo/bar.js
.) Lider çıkarma DÜZENLEME: Önde gelen eğik çizgiyi kaldırmak da işe yaramaz - desen hala bir eğik çizgi içerdiğinden, Git tarafından düz, özyinelemesiz bir kabuk glob olarak kabul edilir ( bunu işaret ettiği için @Joey Hoer'a teşekkürler )./
gibi ya çalışmaz eşleşen yolları public/static/foo.js
ve foo/public/static/bar.js
.
@Ptyx'in önerdiği gibi, yapmanız gereken dosyayı oluşturmak <repo>/public/static/.gitignore
ve sadece bu kalıbı dahil etmektir :
*.js
Öncü yoktur /
, bu nedenle yolun herhangi bir bölümünde eşleşir ve bu desen yalnızca /public/static
dizindeki ve alt dizinlerindeki dosyalara uygulanır .
/
gibi yolları eşleştirmek için de çalışmaz ." yanlış. Alıntı belgelere desen bir eğik çizgi içermiyorsa"/, iş ağacın eğer toplevel için (göreceli .gitignore dosyanın bulunduğu yere yol adı göreli karşı maç için bir kabuk glob desen ve çekler gibi Git davranır onu bir .gitignore dosyasından değil). " desen a içermediğinden eşleşmez . public/static/foo.js
foo/public/static/bar.js
foo/public/static/bar.js
/
İzlenmeyen dosyaları yok saymak için .git / info / exclude adresine gidin. Hariç tut, yok sayılan uzantıların veya dosyaların listesini içeren bir dosyadır.
Bence en basit çözüm kullanmak olacaktır find
. .gitignore
Alt dizinlerde birden fazla takılmayı sevmiyorum ve benzersiz, üst düzey bir yönetmeyi tercih ediyorum .gitignore
. Bunu yapmak için bulunan dosyaları bilgisayarınıza ekleyebilirsiniz .gitignore
. Varsayalım ki /public/static/
projeniz / git home Ben şöyle bir şey kullanırsınız:
find . -type f -name *.js | cut -c 3- >> .gitignore
Gitmek ./
için hangi dosyaların kaçınacağını anlamak için başlangıçta kesmenin genellikle gerekli olduğunu buldum . Bu nedenle cut -c 3-
.