Git'e bir alt dizin dışındaki her şeyi göz ardı etmesini nasıl söyleyebilirim?


218

binAlt dizinde meydana gelenler dışında depomdaki tüm dosyaları yoksaymak istiyorum . Aşağıdaki ekleyerek denedim .gitignore:

*
!bin/*

Ancak bu istenen bir etkiye sahip değil: İçinde yeni bir dosya oluşturdum bin/, ancak git statushala gösteriyor nothing to commit (working directory clean).

Baska öneri?


Yanıtlar:


273

Bu, kök dosyaları ve kök dizinleri yok sayar, ardından kök kutusu dizinini yok sayar:

/*
/*/
!/bin/

Bu şekilde, alt dizinler ve dosyaları da dahil olmak üzere tüm bin dizinini alırsınız.


25
Bazı nedenlerden dolayı bu benim için tutarlı bir şekilde çalışmıyor. İki hatları /stuff/ve !/stuff/specific/, ama yine de / / malzeme / özgü sayar
LB--

1
@ LB-- Benzer bir sorunum vardı ve git check-ignore -vbunun sebebi olduğunu söyledim~/.gitignore
gurney alex

@gurneyalex Yerel repoyu silip yeniden klonlarsam kendini düzeltir, bir hata olmalı.
LB--

2
/ * / Gerekli mi?
Alex Baker

3
Bu benim için işe yaramadı. !/bin/Kök dosyama eklemek zorunda kaldım .gitignore, ama sonra bir /bin/.gitignoredosya da eklemek zorunda kaldım !*... Bu değişikliklerden sadece birini yapmak işe yaramadı. Sadece her iki değişikliği birleştirdikten sonra çalıştı.
Felipe Brahm

113

Burada , bazı dizindeki " MY_SUPER_DUPER_TEMPLATE_directory " klasöründen oluşan her şeyi nasıl yok sayacağınız

Yapı: / bitrix / şablonlar / MY_SUPER_DUPER_TEMPLATE_directory

/*
!/bitrix
/bitrix/*
!/bitrix/templates
/bitrix/templates/*
!/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory
*.DS_Store
*.gitignore

1
Bu, değiştirdiğim bir laravel satıcı paketini işaretlemek için harikalar yarattı! Teşekkür ederim, bana çok fazla baş ağrısı kurtardın
Maria Vilaró

Bu en iyi cevap olarak seçilmelidir.
Bahman.

63

Hedeflere giden yolda her şeyi hariç tutmalısınız, ancak hedefleri dahil etmelisiniz:

Not: Bu bir hariç tutma dosyasıdır (yani .gitignore), bu nedenle mantık ters çevrilir. Tsp dizini hariç tümünü yoksay, src dizini hariç tüm tsp dizininde yoksay ...

/*
!/tsp
/tsp/*
!/tsp/src
/tsp/src/*
!/tsp/src/*.h
!/tsp/src/*.cpp
!/tsp/src/data.txt
!/.gitignore

11
Bir dizini ekleme ilkesi için +1, sonra, içeriği hariç, daha sonra, istenen alt dizin, vb dahil. Projelerimde bu yanıtı kullanarak sona erdi.
John Jesus

40

Sahip olduğunuz tek sorun, bindizinin kendisinin bin/*desenle eşleşmemesi, git'in bindizine bakmamasıdır.

Akla gelen iki çözüm var.

.gitignore :

*
!/bin/
!bin/*

veya

.gitignore :

*
!/bin/

bin/.gitignore :

!*

İlk çözüm, binçağrılmayan alt dizinlerde bulunan dizindeki dosyaları görmezden gelmeyeceği için ikinci çözümü tercih ederim bin. Durumunuzda bu önemli olabilir veya olmayabilir.


2
Benim için çalışmadı. Çalışması için böyle bir .gitignore olması gerekir: # Ignore everything * # But not these files... !/wp-content/ !/wp-content/plugins/ !/wp-content/plugins/my_plugin/ !/wp-content/plugins/my_plugin/* Yorumlar blok kodu yok?
xlttj

1
Tyler'ın cevabı daha iyi tek bir dosya çözümüne sahip
Yarin

19

Resmi git doc'den örneklerden biri şöyle diyor:

Belirli bir foo / bar dizini hariç her şeyi hariç tutma örneği (/ * - eğik çizgi olmadan, joker karakter de foo / bar içindeki her şeyi hariç tutar):

$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar

Ön eğik çizgi hakkında bir açıklama için: Gitignore'da ön eğik çizgi ne zaman kullanılır ?


Bir milyon teşekkürler, bu benim için çalıştı! Diğerlerine, buradaki satırların sırasının önemli olduğunu unutmayın, örneğin / foo / * 'dan önce! / Foo / bar olamaz.
Iamsodarncool

13

En son GIT sürümünü takip etmeyi deneyin.

*
!*/
!/path/to/your/dir/**

aslında son satır için! / path / to / your / dir / ** olmalıdır
faham

@faham, evet, yeni ekledim.
Kirby

11

Ben daha iyi bir yol, bir eğik çizgi ile desen başlayarak her desen üst git dizinine çapa olacağını düşünüyorum:

/*
!/public_html
!/.gitignore

Tüm dosyaları yoksaymak yerine, yalnızca üst düzey dosyaları yok sayar, dizinde yoksaymak istemediğiniz dosyaları yok sayar.



5

Bu belirsiz git hata deneyin.

!bin**/**

Umarım yardımcı olur :)

Destekleyici dokümanlar git bug sample

Not: yorum yapmadan önce deneyin.


0

Bunu son zamanlarda yapmak zorunda kaldım:

*
!sub-dir/
!sub-dir/*

Bir klasörü hariç tutmak için neden iki satıra ihtiyacım olduğundan emin değilim, ama bu benim ve macos için işe yaradı.

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.