Git alt klasörleri yoksay


438

.Net çözümümde birçok projem var. Tüm "bin / Debug" ve "bin / Release" klasörlerini (ve içeriklerini) hariç tutmak istiyorum, ancak yine de "bin" klasörünün kendisini ve içerdiği herhangi bir dll dosyasını içeriyor.

"bin /" ile .gitignore "Hata Ayıkla" ve "Serbest Bırak" klasörlerini yok sayar, aynı zamanda "bin" klasöründe bulunan dll'leri de yok sayar.

.gitignore dosyasındaki "bin / Debug" veya "bin / Release", görmezden gelme desenini "Solution / Project / bin / Debug" olarak tam olarak nitelendirmediğim sürece dizinleri hariç tutmaz. çözümümdeki her proje için bu tam kalıbı dahil etmenin yanı sıra eklenen yeni projeler için eklemem gerekecek.

Herhangi bir öneri?


Neden DLL eklemek? Üçüncü taraf DLL'lere başvuruyorsanız, tüm projelerinizin başvurduğu ortak bir klasör eklemek mantıklı olabilir.
Paddy

6
Paddy'nin hakkı - bunlar üçüncü taraf DLL'leri ise, muhtemelen kodunuzdan uzakta düzenlenmelidir. Bana göre, kendi yapı ürünlerinizi kontrol ediyor gibi görünüyorsunuz, ki bu genellikle gitmek istediğiniz yol değil. Kodda ve derleme yapılandırmasında tam olarak bulunan bilgileri izlemek için git'i kullanırsınız . Ürünler, iyi ürünlerdir. Onları takip etmek sorun istiyor - örneğin, kodu değiştirir, ancak yeni ürünler oluşturmayı ve kontrol etmeyi unutursanız ne olur?
Cascabel

Alt klasörleri hariç tutma konusunda sorun yaşadım. Burada yazılan tam örnekler de dahil olmak üzere her şeyi denedim, ancak başarılı olamadı. Sonunda klasör desenleri arasında ek bir boş satır ekledim ve çalışıyor. Belki bir kodlama problemi. Ben pencereler var ve bunu UTF8 kodladı.
RoadBump

Yanıtlar:


552

Joker karakter denediniz mi?

Solution/*/bin/Debug
Solution/*/bin/Release

Git'in 1.8.2 sürümünde, **herhangi bir alt dizin düzeyini eşleştirmek için joker karakteri de kullanabilirsiniz :

**/bin/Debug/
**/bin/Release/

8
Çözüm / Modül / Proje'de başka bir projeye sahip bir alt klasör olması dışında çalışır, bu yüzden şimdilik / * / * / bin / Debug ve / * / * / * / bin / Debug (sub için) klasörler). Dizin yapınızdaki her düzey için bir joker alt klasör eklemeniz gerektiği anlaşılıyor.
Marcel

1
@Marcel: Git, kesinlikle söylemediğiniz dosyaları görmezden gelmeyecek - joker karakterlerle eşleşen her şeyi yok sayar, daha fazla, daha az değil.
Cascabel

Bence çift yıldız dizin sınırlarını geçecek, yani: / ** / bin / Debug
Trent

11
@Taras: Maalesef öyle değil.
Tuukka Mustonen

2
Visual Studio ile ilgili bir hata oluştu **. Şimdiye kadar düzeltilmelidir. bağlantı
Bogac

106

Aynı ada sahip projedeki tüm dizinleri yok saymak için .gitignore komutunu en üst düzeyde kullanabilirsiniz. Örneğin:

Debug/
Release/

Bu, hemen durumu güncellemelidir, böylece git durumunu yaptığınızda görünür olur. Bu dizinlerin git'e zaten eklenmediğinden emin olun, çünkü bu yoksaymaları geçersiz kılar.


Aynı şey OPs $GIT_DIR/.git/info/excludedosyasına desenler eklenerek de yapılabilir .
Tim Henigan 30'10

1
Fark, .gitignore dosyasının kodu izlemesi, bu nedenle her yerde geçerli olmasıdır. Hariç tutma dosyası yalnızca deponuz için yereldir, yani yalnızca bu depo için geçerlidir. Diğer komisyonların bu dizinleri işlemek için bir nedeni olmadıkça, .gitignore kullanmanızı tavsiye ederim.
Andreas

1
Bununla ilgili başka bir sorun, çözümünüzde Debug adında bir projeniz varsa ve bu da göz ardı edilecektir. Çözüm tüm cevapları ve yorumları bir arada olduğunu düşünüyorum - çözüm ortak veya başvurulan dll farklı bir klasörde tutmak için yapılandırmak, sonra "bin /" göz ardı ve / veya joker karakterler kullanın.
Marcel

16
+1 Git'e önceden eklenmemiş dizinlerin sağlanmasıyla ilgili yorum için. git rm -rf DirectoryName/
Git'e

57

Sorusu tüm alt dizinleri görmezden soruyordu değil, ama bunu göndeririz yüzden, cevap hiçbir yerinde bulamadı: */*.


1
Açıklığa kavuşma şansın var mı? Ben bu tür varyasyonları her türlü denedim ve git addbir dizini ve bu dizinin tüm alt dizinlerindeki tüm dosyaları göz ardı edemezsiniz . Ben denedim dirname/, dirname/*, dirname/**, dirname/*/*, hatta çaresizlik içinde dirname/*/*/*, dirname/*/*/*/*, dirname/*/*/*/*/*.
Chris

3
*/*geçerli dizindeki dosyaları değil tüm alt dizinleri yok sayar. Belirli bir alt dizini yoksaymak normal gitignore kullanımıdır. dirname, dirname/ve dirname/*hepsi benim için çalışıyor. Bu dizindeki herhangi bir şey zaten yapılmış mı?
mgold

Bu yepyeni bir repo - bütününü siliyorum .git , sonra girişimleri arasındaki dizini git initsonra git add --all .(aynı zamanda olmadan denedim --all1.9.4.msysgit.1 kullanarak). Adlandırılan dizinin altındaki boş olmayan her alt dizin dizine eklenir (TortoiseGit ve altında işaretlenir git status). .gitignoreBaşlangıçta ilgili bir satır yoktur, !ancak bazı çatışmalar olmalıdır. İçin klasörleri kaldırarak şimdilik çözüldü add. Bu, teşhis için gerekli bilgileri sağlamak için biraz daha fazla kazma gerektiren bir şey olduğunu tahmin edin. Sözdizimini yanlış anlamadığımı söylediğim için teşekkür ederim.
Chris

Bir klasör içindeki bir klasörü yok saymam gerekir, ancak birincisini değil? Forumda olduğu gibi / ignorethisfolder / ... ama forum adlı klasörü görmezden gelmiyor
Jean Carlos Racoski

Bu, adı nokta ile başlayan bir dizini görmezden gelmemde işe yaramıyor. " /. " ve ". * / *" de çalışmaz.
Tony

44

Yukarıdaki tüm yanıtlar geçerlidir, ancak bu dizinden depoya bir dosya ekledikten sonra, o dosyayı içeren dizini / alt dizini göz ardı edemeyeceğinizden bahsetmediğim bir şey var (git bu yönergeyi göz ardı edecek) ).

Zaten eklenen dosyaları yoksaymak için çalıştırın

$ git rm --cached

Aksi takdirde, önce tüm dosyaları repo'nun hedef dizininden kaldırmanız gerekir; daha sonra bu klasörü yok sayabilirsiniz.


12
git rm - geçmişle ilgisiz / alakasız olmasını istiyorsanız, ancak dosyaları yerel olarak sağlam tutmak istiyorsanız önbelleğe alınır.
Erik Reppen

29

.Gitignore dosyanıza doğru girişleri koymanın yanı sıra, repoya zaten eklenmiş bir şeyi göz ardı etmeye çalışıyorsanız git rm -r /path/to/dir, .gitignore dosyanıza dir eklemeden önce bunu yapmanız ve taahhüt etmeniz gerekir . Aksi takdirde git'in yok sayacağı tek şey yoksayma direktifinizdir.


19

Bunu makinemde çalışmanın tek yolu bu şekilde yapmaktı:

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
/*.*

#Only Include these specific directories and subdirectories:
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/

Eklemek istediğiniz her düzey için içeriğe nasıl açıkça izin vermeniz gerektiğine dikkat edin. Bu yüzden temalar altında 5 alt dizinim varsa, hala bunu açıklamam gerekiyor.

Bu @ Yarin'ın yorumundan: https://stackoverflow.com/a/5250314/1696153

Bunlar yararlı konulardı:

Ben de denedim

*
*/*
**/**

ve **/wp-content/themes/**

veya /wp-content/themes/**/*

Bunların hiçbiri benim için çalışmadı. Çok fazla iz ve hata!


13

İçeriği ve alt dizinleri hariç tutmak için:

**/bin/*

Tüm alt dizinleri hariç tutmak ancak içeriği almak için "/" ekleyin:

**/bin/*/

9

Tüm alt dizinleri yok saymak için şunları kullanabilirsiniz:

**/

Bu, git'in 1.8.2 sürümünden itibaren çalışır.


8

/binDizindeki dosyaları izlemeye devam ederken tüm alt klasörleri yok saymanın genel yolu , projenizin .gitignore dosyasına aşağıdaki satırı eklemek olacaktır:

bin/*/*

Yalnızca adlandırılmış alt klasörleri yok saymak istiyorsanız, şunları yapabilirsiniz:

bin/Debug/*
bin/Release/*

nb. eğer bindizin (.gitignore dosyasının yanında) Projenizin kök değil, bunun yerine örneğin. bin/*/*ihtiyacın olabilirpath/to/bin/*/*

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.