Gitignore problemini büyük bir dizin yapısında çözmeye çalışıyorum, ancak sorumu basitleştirmek için aşağıdaki kısma indirdim.
Yepyeni bir git deposunda iki dosyanın (foo, bar) aşağıdaki dizin yapısına sahibim (şu ana kadar taahhüt yok):
a/b/c/foo
a/b/c/bar
Açıkçası, bir 'git durumu -u' şunu gösterir:
# Untracked files:
...
# a/b/c/bar
# a/b/c/foo
Yapmak istediğim şey, a / b / c içindeki her şeyi yok sayan ancak 'foo' dosyasını yok saymayan bir .gitignore dosyası oluşturmak.
Bir .gitignore oluşturursam, şöyle:
c/
Sonra bir 'git status -u', hem foo hem de bar'ı yok sayılmış olarak gösterir:
# Untracked files:
...
# .gitignore
Beklediğim gibi.
Şimdi foo için bir dışlama kuralı eklersem, şöyle:
c/
!foo
Gitignore kılavuzuna göre, bunun işe yaramasını bekliyorum. Ama değil - hala foo'yu görmezden geliyor:
# Untracked files:
...
# .gitignore
Bu da çalışmıyor:
c/
!a/b/c/foo
Bu da yapmaz:
c/*
!foo
Verir:
# Untracked files:
...
# .gitignore
# a/b/c/bar
# a/b/c/foo
Bu durumda, foo artık yok sayılmasa da, bar da göz ardı edilmez.
.Gitignore'daki kuralların sırası da önemli görünmüyor.
Bu da beklediğim şeyi yapmıyor:
a/b/c/
!a/b/c/foo
Bu hem foo hem de bar'ı görmezden geliyor.
İşe yarayan bir durum, a / b / c / .gitignore dosyasını oluşturup oraya koymamdır:
*
!foo
Ancak bununla ilgili sorun şu ki, sonunda a / b / c altında başka alt dizinler olacak ve her birine ayrı bir .gitignore koymak istemiyorum - 'proje tabanlı' .gitignore oluşturmayı umuyordum. her projenin en üst dizininde yer alan ve tüm 'standart' alt dizin yapısını kapsayan dosyalar.
Bu da eşdeğer görünüyor:
a/b/c/*
!a/b/c/foo
Bu, elde edebileceğim "çalışmaya" en yakın şey olabilir, ancak tam göreceli yolların ve açık istisnaların belirtilmesi gerekir; bu, farklı düzeylerde çok sayıda "foo" adında dosyam varsa, bu bir acı olacaktır. alt dizin ağacının.
Her neyse, ya dışlama kurallarının nasıl çalıştığını tam olarak anlamıyorum ya da dizinler (joker karakterler yerine) yok sayıldığında - a / ile biten bir kurala göre - hiç çalışmıyorlar.
Biri lütfen buna ışık tutabilir mi?
Gitignore'un bu beceriksiz kabuk tabanlı sözdizimi yerine normal ifadeler gibi mantıklı bir şey kullanmasını sağlamanın bir yolu var mı?
Bunu Cygwin / bash3 üzerinde git-1.6.6.1 ve Ubuntu / bash3 üzerinde git-1.7.1 ile kullanıyorum ve gözlemliyorum.