2014-06-10 17 views
66

lider çizgi kullanmak.zaman kadarıyla <a href="https://github.com/github/gitignore">https://github.com/github/gitignore</a> gitignores söz konusu olduğunda daha net <code>.gitignore</code> sözdizimi anlamaya çalışan ve özellikle ediyorum gitignore

Önde gelen eğik çizgi yol adı başlangıcını eşleşir:

Ben lider çizgi sadece (http://git-scm.com/docs/gitignore itibaren) .gitignore dosyasının konumuna göre pathnames maç için kullanıldığını görüyoruz. Örneğin, "/*.c", "cat-file.c" ile eşleşir, ancak "mozilla-sha1/sha1.c" ile eşleşmez. i lider çizgi kaldırdığınızda

ne olur? Bildiğim kadarıyla ben anladım olarak, iki durum vardır: desen bir eğik çizgi içermez (veya sadece bir dizin eşleşmesi gerektiği anlamına gelir bir eğik çizgi içerir), arama içeride yapılır

  1. ise tüm dizin ağacı. Örneğin, desen dir/ maç olacak <root>.gitignore dosyanın konumunu vb <root>/dir, <root>/a/dir, <root>/a/b/c/.../dir,.
  2. desen (son karakteri değil) Sondaki pozisyonunda olmayan bir çizgi içeriyorsa
  3. , o zaman sadece .gitignore dosya konumuna göreli yol adlarının ile eşleştirilir.

    # Directory structure: 
    <root> 
    |- dir/ 
    | |- test 
    |- src/ 
    | |- dir/ 
    | | |- test 
    test file is there only because Git does not track empty directories. 
    

    İlk test:

    # .gitignore 
    dir/ 
    
    # git status 
    nothing to commit 
    

    Yani Git hem dir dizinleri görmezden geliyor

Bu i bu davranışı kontrol etmek yapılan örneklerdir. Bu, 1 numaralı vaka ile tutarlıdır: desende eğik çizgi yoktur (sondaki hariç), bu nedenle Git, tüm dizin ağacını izler ve desenle eşleşen her şeyi göz ardı eder.

İkinci test: Burada

# .gitignore 
/dir/ 

# git status 
Untracked files: 
    src/ 

, Git, kök dizin hemen altında desende lider eğik çizgi sayesinde sadece dir dizini önemsemiyor.

Üçüncü testi:

# .gitignore 
dir/* 

# git status 
Untracked files: 
    src/ 

Bu vaka sayısı 2 ile tutarlıdır: desen içindeki bazı çizgi vardır, bu nedenle kök dizinden başlayarak bir yol olarak kabul edilir.

Şimdi gerçek soru için zamanı. en this gitignore file düşünelim: bunlar örneğin, dizin downloader/ görmezden zaman, aslında bütün dizin ağacında bulunan her downloader dizini gözardı etmiyor? Git'in çalışmalarından önce gördüklerimden beri düşündüğüm şey buydu.

İçinde bir downloader dizini bulunan bir özel modül olması durumunda, Magento'nun kökündeki olağan yanı sıra beklenmedik bir şekilde göz ardı edilecek mi? Bu, biraz önce bir hata meselesi, çünkü gerçekten de başıma geldi.

Yani, desen bir sürü eğik çizgi bulunur, bu yüzden doğru biçimde kökünden başlayarak yol adlarının karşı gelir, ancak birkaç vardır: (i btw bir örnek olarak sadece bahsediyorum) Magento .gitignore dosyada downloader/ ya da errors/ gibi, yanılmıyorsam, potansiyel olarak tehlikelidir ve muhtemelen /downloader/ ve /errors/ olarak değiştirilmelidir.

Daha genel bir soru olarak, kökten açıkça başlayan bir yol adı seçmek ve eğik çizgi içeren desenlerde kullanmak istemediğimde, eğik çizgi içermeyen (sondaki hariç) kalıplar için her zaman en büyük çizgiyi kullanmalıyım. ya da her zaman açıklık için açık bir çizgi kullanmalı mıyım? Bu konu hakkında ne düşünüyorsun?

uzun yazı için okuma ve üzgün için teşekkür ederiz.

+2

Büyük soruya ve gerçekten güzel bir açıklama, ben de bu rahatsız edildi ve araştırma bana açıkça şeyler yaptı. Bunu okuduktan sonra, kökten başlamalılarsa, her zaman eğik çizgi ile yola başlamanın iyi bir uygulama olduğunu söyleyebilirim, niyetini daha açık hale getirir. – Martinsos

+1

Teşekkürler :) Niyetleri daha açık yapmak için eğik çizgileri kullanmakla ilgili notunuza katılıyorum. – swahnee

+0

Bu, .gitignore belgelerinin bir parçası olmalıdır. Anlamak çok daha kolay! – rmorrin

cevap

10

Sen tamamen kendi sorunu cevapladım. Github/gitignore repo'yu daha yakından incelerseniz, çoğu dosyanın kalıpların nasıl yazıldığına dair tutarsız kurallar kullandığını görürsünüz. Belgeleri okumaktan sıkılmayan veya yaptığınız gibi bir şeyleri test etmeyenlerin çoğuna katkıda bulunmaları çok muhtemeldir.

Eğer yardım ederse: Haklısınız, emin olun.

Bu gibi işbirliği projelerinde hata görürseniz, bilginize katkıda bulunmaktan çekinmeyin. Güveninizi daha da geliştirmeniz gerekiyorsa, some precedent bile var.

+0

Çok teşekkür ederim düşünmek zorunda bilir yüzden, daha iyi olurdu! – swahnee

6

Sadece gelecekteki olası referanslar için özetlemek istedim - önde gelen çizgi, eşleşmeyi köke sabitler. o * alıp ağacın aşağı yinelemeli hareket çünkü Böylece, aşağıdaki örnekte, kesme işareti olmadan, joker da foo içindeki her şeyi dışlayacak. Ancak, /* ile, bu klasör foo ve içeriğini dışında her şeyi dışlar:

$ cat .gitignore 
/* 
!/foo 
İlgili konular