.Gitignore'da olumsuzlanmış kalıplar nasıl çalışır?


94

Negatif desenler içeren bir .gitignore dosyası kullanmaya çalışıyorum (! İle başlayan satırlar), ancak beklediğim gibi çalışmıyor.

Minimal bir örnek olarak, aşağıdaki dizin yapısına sahibim:

C:/gittest
 -- .gitignore
 -- aaa/
   -- bbb/
     -- file.txt
   -- ccc/
     -- otherfile.txt

ve gitignore dosyamda şu var:

aaa/
!aaa/ccc/

Anladığım kadarıyla ( bu belge sayfasına dayanarak ) aaa / ccc / otherfile.txt dosyası göz ardı edilmemelidir, ancak aslında git aaa altındaki her şeyi görmezden geliyor.

Şu cümleyi yanlış mı anlıyorum: "İsteğe bağlı bir önek! Bu kalıbı geçersiz kılar; önceki bir kalıp tarafından hariç tutulan eşleşen herhangi bir dosya yeniden dahil edilecektir."

BTW, bu, msysgit 1.7.0.2 ile Windows'ta.

Yanıtlar:


163

Bence aslında yapmak istediğin şey:

aaa/*
!aaa/ccc

Ona "bakma" diyorsun, aaaböylece yolu asla incelemesin aaa/ccc. Joker karakteri kullanırsanız, içeriğini yine de okur aaa, ardından her girdi joker karakterle eşleşir ve aaa/ccchangisinin geri konulduğu dışında yok sayılır .


2
@iconoclast: O zaman muhtemelen farklı bir şey yapıyorsun. Yardım istiyorsanız başka bir soru gönderin (eksiksiz bilgilerle).
Cascabel

Bu benim için de işe yaramadı: / apps / *! / Apps / myApps / FluidTest / bin /
Jarrod Smith

5
@Jarrod Çalışıyor; sadece farklı bir şey yapıyorsun. Cevapta verilen nedenlerden dolayı, bu yöntemi tekrar tekrar kullanmanız gerekecek. ! uygulamalar / Uygulamalarım, uygulamalar / Uygulamalarım / * vb.
Cascabel

Ahh üzgünüm şimdi anladım. Ama SO tekrar oy vermeme izin vermeyecek.
Jarrod Smith

Aaa / ** / *! Aaa / ccc / eee için neden işe yaramadığını merak ediyorum (belirli yoldaki dosyalar dışında her şeyi göz ardı edin)
Phương Nguyenễn

23

İçindeki her şeyi hariç tutmak aaa, ancak dahil etmek aaa/cccve altındaki her şeyi dahil etmek istiyorsanız, şunu kullanmalısınız:

aaa/*
!aaa/ccc
!aaa/ccc/*

İlk satır git'e altındaki aaaher şeyi göz ardı etmesini söyler, ikincisi aaa/cccise üçüncü satırı gerçekten "etkinleştiren" klasörü görmezden gelmemesini söyler ve ardından ona altındaki her şeyi göz ardı etmemesini söyler aaa/ccc.


1
Üçüncü satır benim için hiçbir fark yaratmadı.
James Hopkin

3
Her şeyi herhangi aaa/cccbir seviyedeki herhangi bir alt dizine dahil edebilmek için benim için işe !aaa/ccc/**!aaa/ccc/*
yarayan

3

Herkes hala içinde yeni un-gözardı öğelere bakmak Değilse bir git statusçalışan git update-indexeli teneke yardım Git önce (en azından gitbash sürüm 1.9.x olarak) değişiklikleri görmek için.

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.