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.