git projesindeki herhangi bir 'bin' dizinini yoksaymak


1236

Ben böyle bir dizin yapısı var:

.git/
.gitignore
main/
  ...
tools/
  ...
...

Ana ve araçlar ve herhangi bir düzeyde, herhangi bir düzeyde, göz ardı etmek istediğiniz bir 'bin' dizini olabilir (ve altındaki her şeyi de göz ardı etmek istiyorum). Bu kalıpların her birini .gitignore'da denedim ama hiçbiri çalışmıyor:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

Biri bana yardım edebilir mi? İlk kalıp (çalışacağını düşündüğüm desen) bunu yaparsam iyi çalışır:

/main/**/bin/**/*

Ancak her üst düzey dizin için bir giriş istemiyorum ve her yeni dizin eklediğimde .gitignore öğesini değiştirmek istemiyorum.

Bu, en son msysgit kullanan Windows'ta.

EDIT: bir şey daha, adlarında 'bin' alt dizesi olan dosya ve dizinler var, ben bunların göz ardı edilmesini istemiyorum :)


14
Muhtemelen birisi yardımcı bulacaktır: Eğer birkaç havuzunuz varsa ve her biri aynı .gitignore dosyasına sahipse, onu "ortak" konuma koyabilir ve başlatabilirsiniz> git config --global core.excludesfile ~ / .gitignore_global Son parametre yoludur ortak konuma. PS Git için yeni ve 'en iyi uygulama' öneri olup olmadığından emin değilim. Bunu yapmak istemiyorsanız lütfen bize bildirin. Teşekkür ederim.
Budda

**Bkz: sözdizimi (Mart 2013, 1.8.2 git'e) resmen belgelenmiş şimdi görünüyor aşağıda Cevabımı
VonC

2
Herhangi biri gerçek manuel sayfanın en güncel sürümünü okumak istiyorsa, bkz. Gitignore (5) Manuel Sayfa .

bir satır değerinde bilgi için denemeler okumaktan yorulduysanız daha kolay bir seçenek atlassian.com/git/tutorials/saving-changes/…
suazithustra

Yanıtlar:


1834

1.8.2 sürümünden önce, ' **in özel bir anlamı yoktu .gitignore. 1.8.2'den itibaren git, **sıfır veya daha fazla alt dizin anlamına gelmektedir ( sürüm notlarına bakınız ).

Bir dizin ağacındaki geçerli düzeyin altında herhangi bir yerde bin olarak adlandırılan tüm dizinleri yok saymanın yolu, şu .gitignoredesenli bir dosyadır:

bin/

Gelen mansayfada, orada adında bir dizin görmezden örneği foobenzer bir kalıbı kullanarak.

Düzenleme: Git dizininizde artık izlemek istemediğiniz bir bin klasörü zaten varsa, bunları açıkça kaldırmanız gerekir. Git, artık yeni bir .gitignorekalıpla eşleştiği için zaten izlenen yolları izlemeyi durdurmaz . Yalnızca dizinden ( --cached ) özyinelemeli ( -r ) klasör kaldırma ( rm ) yürütün . Kök kutusu klasörü için komut satırı örneği:

git rm -r --cached bin

72
Git 1.8.2 ile başlayarak, git kabul edecek **içinde .gitignore: dosyaları (kaynak 1.8.2 değişiklik günlüğü )
Carlos Campderrós

15
olduğu binaynı bin/?
Nisba

29
@Nisba, farklılar, binbin adlı dosyaları yok sayarken, bin/bin
Rani Kheir

8
Ben bu düştü beri: git-komut klasör adı büyük / küçük harf duyarlı :) "bin! = Bin" - belki birileri bu ipucu ile birkaç dakika yedek :)
dba

1
Windows10'da .gitignore dosyası oluşturamazsınız, bir gitignore.txt oluşturmanız ve ardından bu dosyayı oluşturmak için komut isteminde ren gitignore.txt .gitignore komutunu çalıştırmanız gerekir
eski püskü

463

.gitignoreSenin rüya gibi görünüyor:

bin/

üst düzeyde.


Yardım ettiğiniz için çok teşekkür ederim sadece göz ardı edilen dosyaları kontrol etmeyi unutma örneği: git checkout bin *
Chris Sim

1
gitignore_global
μολὼν.λαβέ

@ GAlexander, neden bin / dizinleri global olarak görmezden gelmek istersiniz? Genellikle sürüm içeriği vardır. Ve genel yoksay, deponun diğer kullanıcılarını etkilemez.
Michael Krelin - hacker

234

Git yeni başlayanlar için bahsetmeye değer olduğunu düşünüyorum:

Zaten teslim edilmiş bir dosyanız varsa ve yoksaymak istiyorsanız, daha sonra bir kural eklerseniz Git dosyayı görmezden gelmez . Bu durumlarda, terminalinizde aşağıdaki komutu çalıştırarak önce dosyayı kaldırmalısınız:

git rm --cached

Bu nedenle .gitignore dosyasını düzenledikten sonra yerel deponuzdaki (zaten var olan) bazı dizinleri yoksaymak istiyorsanız, bunu kök dizininizde çalıştırmak istiyorsunuz.

git rm --cached -r .
git add .

Temel olarak yerel repo'yu 'yenileyecek' ve yok sayılan dosyalardan etkilenmeyecektir.

Görmek:

http://git-scm.com/docs/git-rm ,

https://help.github.com/articles/ignoring-files/


genellikle git add -Ataahhütlerimde bir a yaparsam , bunun yerine bunu kullanabilir miyim? ve noktayı ilk satırda -A ile değiştirebilir miyim?
ajax333221

69

Daha **önce hiç düzgün çalışmadı, ancak git 1.8.2'den (8 Mart 2013) beri , açıkça belirtilmiş ve desteklenmiş gibi görünüyor:

0 ve daha fazla alt dizin seviyesiyle eşleşen bir desen olarak.gitignore ve .gitattributesdosyalardaki desenler olabilir**/ .

Örneğin, " foo/**/bar" bar, " foo" içinde veya " foo" alt dizininde " " ile eşleşir .

Sizin durumunuzda, bu şu an desteklenebileceği anlamına gelir:

/main/**/bin/

46
[Bb]in/

hem büyük hem de küçük harfle eşleşir


2
[B]in/büyük harf olmak
Gank

Sadece Binklasörün yoksayılmasına ve gitmesine izin vermesine nasıl izin verilir bin? [B]in/Her iki taahhüt edecektir Binve bin.
Gank

4
Bunu yapmalı, @Gank: Bin/ !bin/
Marco G

34

Burada bahsedildiğini görmedim, ancak bu büyük / küçük harfe duyarlı görünüyor. / Bin olarak değiştirdikten sonra dosyalar beklendiği gibi yoksayıldı.


3
Bu, açıkça ilgili olan orijinal sorunun cevabı bindeğil, değil Bin.
CB Bailey

49
Bir cevap olmasa da, aynı konuda (kendim, şimdi) başkalarının aradığı bütünlüğü arttırıyor.
Jay

25

[Bb]in sorunu çözecektir, ancak ... Burada görmezden gelmeniz gereken daha kapsamlı bir liste (GitExtension tarafından örnek liste):

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.sbr
obj/
[Rr]elease*/
_ReSharper*/

3
Not: Bunun gibi şeyler GLOBAL gitignore'unuzda olmalıdır (genellikle ana dizininizde.) Proje gitignore sadece projenize özgü şeyleri göz ardı etmelidir (yani bir C uygulaması için .o dosyaları.)
BraveNewCurrency 21'de 15


18

Adım 1: .gitignore dosyasına aşağıdaki içeriği ekleyin.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

2. Adım: Etkili olduğundan emin olun

Sorun devam ederse, bunun nedeni .gitignore'daki ayarların yalnızca orijinal olarak izlenmeyen dosyaları yok sayabilmesidir . Bazı dosyalar sürüm kontrol sistemine önceden eklenmişse, .gitignore öğesinin değiştirilmesi geçersizdir. Bu sorunu tamamen çözmek için , depo kök klasöründe aşağıdaki komutları çalıştırmak için Git Bash veya Paket Yöneticisi Konsolu'nu açmanız gerekir (aşağıdaki ekran görüntüsüne bakın).

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'

PM konsolu Sonra sorun tamamen çözülecek.


8

Kelimenin tam anlamıyla cevapların hiçbiri benim için işe yaramadı; benim için çalışan tek kişi (Linux'ta):

**/bin
(yes without the / in the end)

git version 2.18.0 

Bu bin, alt dizinlerde belirtilen tüm klasörleri de yoksaydı mı?
vineeshvs

5

Bir uyarı olarak;

.gitignoreBir şekilde çalışmadığını düşünüyorsanız (içine foo/*klasör eklendi , ancak git statuso klasör içeriklerini değiştirilmiş olarak veya bunun gibi bir şey olarak gösteriyor), bu komutu kullanabilirsiniz;

git checkout -- foo/*


3

2.13.3 ve sonrası için .gitignore dosyanıza sadece bin yazmak, bin'i ve tüm alt dizinlerini ve dosyalarını yok saymalıdır.

çöp Kutusu


2

.Gitignore dosyasına ** / bin / eklemek, benim için hile yaptı (Not: bin klasörü dizine eklenmedi).


1

İçindeki desen .gitignoreeğik çizgi ile biterse /, yalnızca bir dizinle bir eşleşme bulur.

Başka bir deyişle, bin/bir dizin binve altındaki yollar ile eşleşir, ancak normal bir dosya veya sembolik bir bağlantıyla eşleşmez bin.


Desende bir eğik çizgi yoksa , binGit'teki gibi buna bir kabuk küre deseni olarak davranır (açgözlü). En iyisi basit kullanmak olacaktır /bin.

bin bu sorun için en iyi çözüm olmazdı.


Şunu mu demek istediniz: 'start with' a /?
vineeshvs

0

Benim durumumda gitignore dosyasının kodlanması sorunluydu, UTF-8 olup olmadığını kontrol et

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.