istisna yoksay


326

Git *.dlldosyaları yoksay yapan bir gitignore dosyam var ve bu aslında istediğim davranış. Ancak, bir istisna (yani taahhütte foo.dllbulunabilmek) istersem bunu nasıl başarabilirim?



fwiw, bu konudaki yinelenen cevapların büyükbabası - bakmanız gereken biri - muhtemelen .gitignore birkaç dosya dışında her şeyi görmezden gelmek olacaktır - çok düzenli aktivite ve birkaç iyi cevap. Bu cevabın belirli bir hayranıyım, bu net ve kapsamlı görünüyor.
Kay V

Yanıtlar:


447

kullanın:

*.dll    #Exclude all dlls
!foo.dll #Except for foo.dll

Gönderen gitignore :

İsteğe bağlı bir önek! paterni reddeden; önceki bir kalıp tarafından hariç tutulan eşleşen dosyalar tekrar dahil edilir. Reddedilen bir kalıp eşleşirse, bu daha düşük öncelikli kalıp kaynaklarını geçersiz kılar.


22
Ayrıca bakınız cevap formu @Matiss Jurgelis - bu önemli bir ek
Dan

7
Kural dışı durumu projemin gitignore'una ekleyebilir miyim, global gitignore'a? Örneğin, bir dizindeki tüm DLL'leri dahil etmek istersem? Gitignore_global'ım var *.dllve projemin gitignore'u var !Libs/*.dllama bu işe yaramıyor gibi görünüyor.
Joel Kinzel

1
@jkinz, denemelisin !Libs/**/*.dll.
Rosberg Linhares

@RosbergLinhares Veya !**/Libs/*.dllklasör yapısına bağlı olarak.
JAB

2
Teşekkürler, ama bir mac yorum ekledi aynı satırda !foo.dllkomut geçersiz kıldı. Yorumu ayrı bir satıra eklersem çalışır.
Giacomo

261

Git, şunu yazarsanız klasörleri yoksayar:

/js

ancak şunu yaparsanız istisnalar ekleyemez: !/js/jqueryveya !/js/jquery/veya!/js/jquery/*

Yazmalısınız:

/js/* 

ve ancak böyle alt klasörler hariç

!/js/jquery

44
Bu çok önemli. Teşekkür ederim!
VisioN

3
Ancak, iç içe klasörler ekleyemez gibi görünüyor, örneğin !/js/jquery/xyzlibgöz ardı edilmeyecek ...
Cahil

2
@Ignorant'ın dediği gibi, yok sayma kuralından "hariç" olduğunuz klasör, "*" ile aynı konumda olmalıdır
Kızıl Bezelye

3
böylece /js/*, !/js/jquery, /js/jquery/*, !/js/jquery/xyzlib? Bunu yapmak için oldukça komik bir yol gibi ...
Çürümez Gece

bana gerçekten yardım ettin.
Loyea

55

Basitçe yapabilirsiniz git add -f path/to/foo.dll.

.gitignore yalnızca olağan izleme ve benzeri şeyler için dosyaları yok sayar git add .


4
Sadece daha fazla ayrıntı için, -f.gitignore
git'e

Bu sadece bir dosyanız varsa harika, bir desene ihtiyacınız varsa daha az kullanışlı
Liam


15

!Bir hariç tutma kuralından önce ekleyin .

Göre gitignore adam sayfası :

Desenler aşağıdaki biçime sahiptir:

...

  • İsteğe bağlı bir önek! paterni reddeden; önceki bir kalıp tarafından hariç tutulan eşleşen dosyalar tekrar dahil edilir. Reddedilen bir kalıp eşleşirse, bu daha düşük öncelikli kalıp kaynaklarını geçersiz kılar.


4

Visual Studio ile çalışıyorsanız ve .dll dosyanız bir binklasörde yer alıyorsa, .dll dosyasının özel durumunu ekleyebilmeniz için önce bin klasörünün kendisi için bir özel durum eklemeniz gerekir. Örneğin

!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll

Bunun nedeni, varsayılan Visual Studio .gitignoredosyasının yok sayma kalıbı içermesidir[Bbin]/

Bu desen tüm bin klasörlerini (ve dolayısıyla içeriklerini) zapping eder, bu da içeriği gereksiz dahil etme girişiminde bulunur (klasörün kendisi zaten yok sayıldığı için).

Çalıştırılarak dosyamın neden istisna olmadığını anlayabildim

git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll

Git Bash penceresinden. Bu [Bbin]/kalıbı döndürdü .


2

Çözüm, git ignore kuralı ile istisna kuralı arasındaki ilişkiye bağlıdır:

  1. Dosyalar / Dosyalar aynı seviyede: @Skilldrick çözümünü kullanın .
  2. Klasörler / Alt Klasörler: @Matiss Jurgelis çözümünü kullanın .
  3. Dosyalar / Farklı düzeylerdeki dosyalar veya Dosyalar / Alt Klasörler: şunları yapabilirsiniz:

    *.suo
    *.user
    *.userosscache
    *.sln.docstates
    
    # ...
    
    # Exceptions for entire subfolders
    !SetupFiles/elasticsearch-5.0.0/**/*
    !SetupFiles/filebeat-5.0.0-windows-x86_64/**/*
    
    # Exceptions for files in different levels
    !SetupFiles/kibana-5.0.0-windows-x86/**/*.suo
    !SetupFiles/logstash-5.0.0/**/*.suo
    

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.