SORU
8 HAZİRAN 2010, Salı


Nasıl gitignore dışlama kuralları gerçekten işe yarıyor mu?

Büyük bir dizin yapısı üzerinde gitignore bir sorunu çözmek için çalışıyorum, ama benim sorum basitleştirmek için aşağıdaki azaldı.

Yeni gıt marka bir depo içinde iki dosya (foo, bar) aşağıdaki dizin yapısı (şimdiye kadar tamamlar) var:

a/b/c/foo
a/b/c/bar

Belli ki, 'git status -u' gösterir:

# Untracked files:
...
#       a/b/c/bar
#       a/b/c/foo

Yapmak istediğim şey bir oluştur ./b/c içinde her şeyi yok sayıyor ama dosyayı göz ardı etmediğini gitignore dosyası''. foo

Eğer bir oluşturun .böylece gitignore:

c/

Sonra da 'git status-u' gösterileri görmezden geldi: hem foo ve bar

# Untracked files:
...
#       .gitignore

Beklediğim gibi.

Şimdi Eğer foo için bir dışlama kuralı eklerseniz, böylece:

c/
!foo

Gitignore Bu kılavuz göre, bu iş için bekliyorum. Ama onu hala foo yok sayar: yok

# Untracked files:
...
#       .gitignore

Bu da çalışmıyor:

c/
!a/b/c/foo

Ne yapar:

c/*
!foo

Verir:

# Untracked files:
...
#       .gitignore
#       a/b/c/bar
#       a/b/c/foo

Foo artık göz ardı edilir, ancak bu durumda, bar da göz ardı edilmez.

Kuralları sırada .gitignore da önemli görünmüyor.

Bu da beklediğim şeyi yapmaz:

a/b/c/
!a/b/c/foo

Bir de foo ve bar yok sayıyor.

İşini yapan bir durum ise dosya/b/c a/I oluşturmak.gitignore ve orada koymak:

*
!foo

Ama bu sorunu sonunda/b/c altında başka alt dizinler olacak ve ayrı koymak zorunda istemiyorum .her birini oluşturmak için umuyordum içine gitignore 'proje tabanlı' .her projenin üst dizine oturup, ve tüm kapak olan 'standart' alt yapı. gitignore dosyaları

Bu da eşdeğer gibi görünüyor:

a/b/c/*
!a/b/c/foo

Bu belki de en yakın şey, bir "çalışma" ben de arzu, ama tam göreli yollar ve açık bir istisna olması gerektiğini belirterek, hangi olacak bir ağrı varsa benim yapmam gereken bir sürü dosya adı 'foo' farklı seviyelerdeki alt ağacı.

Zaten, ya çok dışlama kuralları nasıl çalıştığını anlamıyorum, ya da dizinler (joker yerine) göz ardı olduğunda hiç bir kural / son vererek çalışmıyorlar

Kimse bu konuda bizi aydınlatabilir misiniz?

Bir şekilde gitignore kullanımı yapmak için bir kabuk tabanlı bu beceriksiz sözdizimi yerine düzenli ifadeler gibi mantıklı var mı?

Ve git-1.6.6.1 Ubuntu özellik listesi/bash3 ve git-1.7.1/bash3 ile bu gözlemlemek kullanıyorum.

CEVAP
8 HAZİRAN 2010, Salı


/a/b/c/*
!foo

Benim için iş gibi görünüyor (1.7.0.4 Linux üzerinde gıt). * önemli olan dizinin kendisi görmezden geldiğin gibi git yoksa içine bakacak şekilde) dizin dışlama sağlar () içindeki dosyalar yerine.

Sanırım bu istisnalar olarak söyleyerek, "ama bu bir" yerine "vardır ama bu" - "Yoksay bu dizin (/a/b/c/) ama bu (foo)" pek mantıklı gelmiyor; "Yoksay tüm dosyaları bu dizin (/a/b/c/*) ama bu (foo)" diyor. Man sayfasına yazdığı gibi

İsteğe bağlı bir önek ! desen; eşleşen herhangi bir dosya önceki bir desen tarafından dışlanan yadsıyan yeniden dahil olacak.

yani,dosyadışarıda bırakıldığı için zaten yeniden dahil olmak. Biraz ışık tutuyor umuyoruz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • failblog

    failblog

    17 HAZİRAN 2008
  • o0oCyrusViruso0o

    o0oCyrusViru

    11 Mart 2008
  • UniqueApps

    UniqueApps

    4 Ocak 2009