Git, gitignore'da olmayan dosyaları görmezden geliyor


117

Görüntü dosyalarını ve birkaç başka dosyayı görmezden gelen bir git havuzum var, ancak .gitignoredosyamda yalnızca bir config.phpdosyayı yok sayan bir dosya var. Bulamadığım bir yerde küresel görmezden gelen bir dosya var mı? Şimdi eklemek için dosyaları belirtmem gerekiyor ve bu bana şu uyarıyı veriyor:

Aşağıdaki yollar, .gitignore dosyalarınızdan biri tarafından yok sayılır.

Dosyamın içeriği ~/.gitconfigsadece e-posta adresimdir.


Yanıtlar:


198

git check-ignore

Gitignore dosyanızda hata ayıklamak için git check-ignorekomutu kullanın (dosyaları hariç tutun).

Örneğin:

$ git check-ignore -v config.php
.gitignore:2:src    config.php

Yukarıdaki çıktı, verilen her bir yol adı için (çizgi dahil) eşleşen örüntü (varsa) hakkında ayrıntılar.

Yani belki dosya uzantınız göz ardı edilmez, tüm dizin göz ardı edilir.

Döndürülen biçim:

<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>

Veya .gitignorekullanıcı HOME ve depo klasörünüzü yazdırmak için aşağıdaki komutu kullanın :

cat ~/.gitignore "$(git rev-parse --show-toplevel)"/.gitignore "$(git rev-parse --show-toplevel)"/.git/info/exclude

Alternatif olarak git add -f, aksi takdirde yok sayılacak dosyaları eklemeye izin veren kullanın .

Daha fazla ayrıntı için man gitignore, bkz man git-check-ignore.

Sözdizimi

git check-ignore [seçenekler] yol adı…

git check-ignore [seçenekler] --stdin


5
Bu, kabul edilen cevaptan çok daha iyi. Buna alınma ama bu günümü kurtardı. Teşekkür ederim kenorb.
luanjunyi

1
Daha fazla oy hak ediyor. Bazı / vendor / klasörlerindeki bazı garip gitignore'un en son git sürümünde sorunlara neden olduğunu öğrendim.
Manuel Arwed Schmidt

2
bu beni bugün kurtardı ... Görünüşe göre görsel stüdyo, kullanıcıların belge klasöründe gitignore_global.txt adlı bir dosya oluşturdu ve bu, görmezden gelemediğim dosyaları görmezden geliyordu
Samuel

1
Sorunumu mükemmel bir şekilde çözdü. Bazı desenlerin göze çarpması kolay değildir !!
Willa

54

Git yapılandırmanızın, göz ardı edilen ek kalıplara sahip bir dosyaya giden bir yol olan core.excludesfile içerebileceğini bilmek iyi olabilir. Böyle bir konfigürasyona sahip olup olmadığınızı şu komutu çalıştırarak öğrenebilirsiniz (sorunlu git deposunda):

git config core.excludesfile

Bir dosya yolu yazdırırsa, daha fazla bilgi için o dosyanın içeriğine bakın.

Benim durumumda git'i 'Simge?' Kalıbını yok sayan eski bir boxen sürümü üzerinden yükledim. benim durumumda bana bu soruda belirtilen bir klasör simgeleri için uyarı verdi (Büyük / küçük harf duyarlı olmayan bir dosya sistemindeyim, bu yüzden Icon? simgelerle eşleşiyor).


2
Bu gerçekten benim sorunumdu. Bu dosyanın nasıl ve ne zaman düzenlendiğinden emin değilim, ancak içinde listelenmesini istediğim dosya vardı
toxaq

2
Teşekkürler, beni saatlerce saf ızdıraptan kurtardın. Benim durumumda, belgeler klasörü altında mantıksız olarak çok sayıda istisna içeren bir gitignore_global.txt yaratan kaynak ağacının (git repo görselleştiren bir araç) kurulumuydu.
Mekanik Nesne

Ben de aynı lanet Icon?görmezden geldim .
Justin Skiles

Bu benim için böyleydi. Global görmezden gelme dosyasında epeyce kural vardı. Teşekkürler +1
Madness

Küresel görmezden gelmemde * .json vardı - bir kabustan bahsediyorum - teşekkür ederim!
Jason Perfetto

31

Bunları kontrol et:

  1. Birçoğu olabileceği için başka .gitignore dosyalarını aradınız mı?

  2. Ayrıca, orada bir şey olup olmadığını görmek için REPO / .git / config'e bakın.

  3. Repo dışlama Repo başına yerel kurallar deponuzdaki .git / info / exclude dosyasına eklenebilir. Bu kurallar repo ile işlenmediği için başkalarıyla paylaşılmaz. Bu yöntem, düzenleyiciniz tarafından oluşturulan dosyalar gibi diğer kullanıcıların oluşturmasını beklemediğiniz yerel olarak oluşturulmuş dosyalar için kullanılabilir.


Depoda başka .gitignore dosyası veya .git / config dosyasında hiçbir şeyi yok sayan hiçbir şey yoktur. .Git / info / exclude nasıl yapılandırılır?
Ian Hunter

4
Bu cevabın neden cevaplandı olarak işaretlendiği açık değil. Bu sorun tam olarak nasıl çözüldü?
Sonraki Geliştirici

dışlamak benim sorunumdu. Geçmişte kullandığım ama nerede olduğunu unuttuğum başka bir yolu olduğunu biliyordum!
Chucky

22

Aynı sorunu yaşadım - bir dizin şu hatayla git tarafından yok sayılıyordu:

➭ git add app/views/admin/tags/
The following paths are ignored by one of your .gitignore files:
app/views/admin/tags
Use -f if you really want to add them.
fatal: no files added

Sonunda sorunumun şu satırlarımda bir satır olduğunu anladım ~/.gitignore_global:

TAGS

yol ile eşleşen app/views/admin/tags. Global gitignore dosyasına bir eğik çizgi ekleyerek bunu düzelttim

/TAGS

ve git dizinimi tekrar izlemeye başladı.


3
Kısmi eşleşmeleri aramamı sağlayan +1 ... gitignore_global.txt "[Rr] elease * /" içeriyordu, bu da "releaseasenotes" dizinimin yok sayılmasına neden oluyordu.
Trev

Daha da zorlaştırmak için git, depoda olanları değil, yalnızca yeni eklenen dosyaları yoksayacaktır. Bu yüzden .gitignore dosyama "foo /" eklediğimde, foo alt dizinlerine son eklenen dosyaları yok saydı, tüm dosyaları değil. Neden bazı dosyaların göz ardı edildiğini ve diğerlerinin olmadığını anlamam bir saatimi aldı.
ccleve

Bende de aynı sorun var. SourceTree, Araçlar menüsü-> Seçenekler öğesi-> Git sekmesinde ~ / .gitignore_global dosyasını ayarlar. Global Ignore listesini temizledikten sonra "git add ..." komutu çalıştı.
Kate

Ben de aynı sorunu yaşadım. Ben helpgözardı ediliyordu dizini. Neyse ki cevabınızı çok çabuk buldum.
Abdul Sadık Yalçın

9

Benim için ~ / .gitignore_global dosyamda yanlışlıkla bir joker karakterim vardı. Belki orayı kontrol edin?


1
Benim için tam olarak sorun buydu. Orada * .png vardı, oraya nasıl gittiğine dair hiçbir fikrim yoktu.
Shahar

3

Denenecek başka bir şey: .gitProje dizinim A'nın altına yerleştirilmiş kendi deposu olan bir B dizinim vardı (ancak bir alt modül olarak değil). B'de bazı değişiklikler yaptım ve bunu bir bonafide alt modül haline getirmek istedim. Git A'nın kendi havuzunu içerdiği için B'yi otomatik olarak yok saydığına inanıyorum ( alt modülleri olmayan iç içe geçmiş git depolarına bakın ? ). B klasörünü yeniden adlandırdım ve bir alt modül olarak tekrar klonlamayı denedim ve bu bana yanıltıcı ".gitignore tarafından yok sayıldı" hata mesajını getiriyordu. Çözüm, .gitB'yi silmekti .


2

Ben de seninle aynı sorunu yaşıyordum. Aldığınız tek yanıt, kontrol etmek için birkaç yer listeledi, ancak hiçbiri sorunu benim için çözmedi ve yorumunuzdan da sizin için düşünmüyorum. Dizin ağacında altta saklanan BAŞKA .gitignore dosyam yoktu; .git / config içinde hiçbir şey; .git / ingore / exclude içinde hiçbir şey

Hala sorun yaşıyorsanız, bu yanıtı kontrol edin . Benim için sorunu çözdü

Temel olarak, ~ / .gitignore dosyasını kontrol edin. Benimki ~ / .gitignore_global olarak adlandırıldı. Oluşturulduğu zaman (bilmiyorum ben kesinlikle bunu yapmak değildi) ama çok onlardan biri onu orada koymuş olmalı, ben ilk yüklendiğinde farklı git kurulumu bir ton var çalıştı.

Umarım cevabı size yardımcı olur!


1

Git'ten bu hata mesajını almanın bir başka nedeni de, git submodule addönceki bir git komutu kilitlendiğinde ve kilit dosyasını terk ederken komutu çalıştırırken ortaya çıkabilir (bu, örneğin git komutlarını içeren özel komut dosyaları kullandığınızda ve ) çökmesine.

git commitBunun yerine komutu çalıştırırsanız, koşulların hiçbiri değişmemişken ( dosyalarınızın suçlanacağını git submodule addbağırmaya devam edecek .gitignore), bunun yerine başka bir hata raporu görürsünüz :

$ git commit -a
fatal: Unable to create '..../.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

ve gerçekten de kilit dosyasını silme:

rm .git/index.lock

sorunu çözer. (Bu, 2.1.0.9736 git sürümünde olur. Gelecekteki git sürümlerinde düzeltilebilir.)


Teşekkürler, bu benim yaşadığım sorun oldu. Hayat kurtarıcı!
JDawgg

1

Klasör için izninizin olduğunu kontrol edin. Bununla yeni karşılaştım ve bunun nedeni, terminalde oturum açtığım kullanıcıya değil, klasörün www-data kullanıcısına ait olmasıydı.


1

Benim durumumda, soruna neden olan yolumdaki eğik çizgiydi ...

Çalışmıyor

/srv/bootstrap/

İş

srv/bootstrap/

1

Bir şey daha: içinde bulunduğunuz dizine yazma veya çalıştırma için kök erişimi gerekiyorsa, kök kullanıcıda olduğunuzdan emin olun. Aslında bir alt modül eklemeye çalışırken garip bir hata aldım ve git, klonladığım yolun git ignore dosyası tarafından yok sayıldığından şikayet etmeye devam etti. Sonra root kullanıcısına geçtim, alt modül eklentisini tekrar çalıştırdım ve herhangi bir sorun olmadı.


1

Olmayabilir .gitignore: skip-worktreeveassume-unchanged

Bir dosya aşağıdaki nedenlerle göz ardı edilebilir:

  1. .gitignore (hepsinin kombinasyonu)
  2. git update-index --skip-worktree
  3. git update-index --assume-unchanged

Ek olarak, bir dosya .gitignoredizin / önbellekte VE halihazırda hazırlanmışsa, İZİNSİZ olabilir .

Yukarıda numaralandırılmış durumları kontrol etmek için:

  1. İki .gitignoredışlama durumu için şu çıktıyı karşılaştırın:

    • git check-ignore --verbose --non-matching --no-index file1 file2 file3
    • git check-ignore --verbose --non-matching file1 file2 file3
  2. git ls-files file1 file2 file3 | grep -E '^S'

  3. git ls-files file1 file2 file3 | grep -E '^[[:lower:]]'

Bu çok zor, sadece bana bir takma ad verin!

Aşağıdaki takma ad, yukarıda listelenen tüm durumları kapsayacaktır:

ignore = !"bash -c 'diff --unified=999999999 --color=always <(git check-ignore --verbose --non-matching --no-index \"$@\") <(git check-ignore --verbose --non-matching \"$@\")' - \"$@\" | tail -n+4; git ls-files -v \"$@\"| grep -E '^(S|[[:lower:]])' # Print ignore status of arguments. Files included by index are tagged with prepended '+'. ls-files S means update-index --skip-worktree, and lower first letter means --assume-unchanged."

Yorum ve son ", size kopyalanacak satırın parçasıdır .gitconfig.

Kullanımı:

git ignore file1 file2 file3

0

Lütfen ayrıca kontrol edin ~/.gitignoreve ~/.gitignore_globalhangileri bazı Git istemcileri tarafından oluşturulabilir (örn. Mac OS X'te Atlassian SourceTree).


0

.gitignoreDosyanın kendisini görmezden gelmediğinden emin olun . Yaygın bir hata, dosyaya geçerli klasördeki her dosyayı yok sayacak bir *kural eklemektir .gitignore. Bunun çözümü şunlara bir istisna eklemektir .gitignore:

*
!.gitignore

Bu şekilde dizindeki tüm dosyalar hariç tutulacaktır .gitignore.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.