Yanıtlar:
Hiç denemedim ama git help ignorebir koyarsanız düşündürmektedir .gitignoreile *.jsde /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 gitsü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ınabckonumuna göre.gitignoresonsuz 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 xxxoysa xxx/hedefleri xxxdizini 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 .gitignoreherhangi 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/*.jsmaç olacak /public/static/foo.jsama 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.jsve foo/public/static/bar.js.
@Ptyx'in önerdiği gibi, yapmanız gereken dosyayı oluşturmak <repo>/public/static/.gitignoreve 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/staticdizindeki 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.jsfoo/public/static/bar.jsfoo/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. .gitignoreAlt 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-.