alt dizindeki .gitignore kurallarını yok saymak mümkün mü?


83

Kökteki .gitignore kuralları dışında alt dizindeki tüm .gitignore kurallarını yok saymak istiyorum.

örneğin) zaten .gitignorebir dizin yapısında dosyam var /a.

Ve ayrıca .gitignoredosyaya sahip /a/b. Varsayalım /asahip a.txt b.txtdosyaları.

/a/bvardır .configdosyayı. .gitignoretanımlar .configiçinde /a/b.

.configDosya tarafından göz ardı edilecektir .gitignoreiçinde /a/b.

Ama gerçekten alt dizindeki .configkurallarını görmezden gelerek dosyayı izlemek istiyorum .gitignore.

Mümkün mü?

Şimdiden teşekkürler

Yanıtlar:


135

Sorunuz çok açık değil, ancak farklı gitignore kuralları istediğiniz bazı alt dizinler varsa, o dizinde yeni bir .gitignore oluşturabilirsiniz.

Sahip olduğunuzu söyleyin:

project / .gitignore
project / stuff / .gitignore

Stuff / içindeki .gitignore, kök dizindeki .gitignore'u geçersiz kılar.

git help gitignoreveya man gitignoreneyin mümkün olduğu hakkında biraz daha fazla bilgiye sahip.


2
Ben OP bir dizin yapısına sahip olmadığını soran düşünüyorum /a/b/cve güncellemek .gitignoreüzere /a/b, bu mümkündür /a/b/ckuralları göz ardı etmek /a/bve bunun yerine yalnızca gelen kuralları kullanabilirsiniz /a.
Michael Mior

45
Evet, soru buysa, zincirin aşağısında .gitignore'da kuralları geçersiz kılmak mümkündür. "An optional prefix ! which negates the pattern; any matching file excluded by a previous pattern will become included again."
Signine

3
@signine Dizinlerle çalışmaz. Cevabımı gör .
Ross Patterson

2
Sanırım şunu söylemenin daha doğru olacağını düşünüyorum: basitçe geçersiz kılma değil, daha yüksek öncelik ile inner .gitignorebirleşecek outer .gitignore.
user218867

@eric wang görünüşe göre bir alt dizin birleşmiyor, ancak geçersiz kılıyor: git-scm.com/docs/gitignore
topspin

41

Deponuza dahil etmek istediğinizi node_modulesvarsayalım, ancak satırın altındaki bazı modüllerin .gitignorekendine ait olduğunu varsayalım. Aşağıdakileri kök .gitignoredosyanıza ekleyerek kuralları geçersiz kılabilirsiniz :

# Make sure to include everything in node_modules.
!node_modules/**

3
Bunu yapmanın daha genel bir yolu var mı? Diyelim ki node_modules/mod1, node_modules/mod2her ikisinin de node_modulesiçinde daha derin olanları yok sayan bir .gitignore var (içinde olduğu gibi node_modules/mod1/node_modules. Modülleri sık sık ekleyip çıkarıyorum, böylece her zaman yok saymak node_modules/mod1/.gitignoreveya elle eklemek için kuralları çok iyi bilemiyorum ve elle ekleyemiyorum !node_modules/mod1/node_modules. Temel olarak bir meteor uygulaması yerleştirmeye çalışıyorum ve tüm gömülü .gitignoresolanlar hepsini
git'e

10

Buradaki sorunun anahtarı, bir üst dizinin dışarıda bırakılmasıdır. Kimden $ man gitignore:

Bir dosyanın üst dizini dışarıda bırakılırsa, bir dosyayı yeniden dahil etmek mümkün değildir. Git, performans nedenlerinden ötürü hariç tutulan dizinleri listelemez; bu nedenle, içerilen dosyalardaki herhangi bir örüntü, nerede tanımlanırsa tanımlansın, hiçbir etkiye sahip değildir.

İşte onu nasıl çalıştırdım. Verilen:

/a/...
/b/foo
/c/...

/.gitignore:

/*
!/b

Sonra /b/fooher şeyi ederken olarak dahil dosyaları görünecektir /ave /cdışında tutulacaktır. Değiş tokuş, dosyaları dahil etmek istediğiniz herhangi bir dizinin tüm üst öğeleri için bir olumsuzlama eklemeniz gerektiğidir.


Neden kullanmıyorsun !/b/**/*?
Alexis Tyler

Sizden daha fazla açıklama yapmadan cevap veremem.
Ross Patterson

6

Bildiğim kadarıyla bunu yapmanın bir yolu yok. Yerel .gitignore kök ginignore üzerine yazacağından Çözümüm manuel olarak ekleniyor.

git add --force [ your file and folder]

.gitignoreebeveyn herhangi bir alt klasör ayarını geçersiz kıldığı için çocuk benim için çalışmadı. Eklemeyi kullanmaya zorlarsanız git add -f myfile.txt, üst .gitignoreayarları atlayarak değişiklikleri izlemeye başlar .
SliverNinja - MSFT
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.