.gitignore her klasör ve alt klasördeki tüm .DS_Store dosyaları


560

.Gitignore dosyasına .DS_Store ekledim, ancak her dizinde ve alt klasörde değil, yalnızca kök dizinde .DS_Store'u yok sayıyor gibi görünüyor.

Bunu nasıl düzeltirim?



.Gitignore'a tam olarak nasıl eklediniz? Tüm dizinlerde çalışmalıdır (benim için yapar).
Thilo

Benim için de çalışıyor. Ben de (platforma özel) bir yeni satır olması gerekiyorsa, ancak dosyanın sonunda sonunda denedim ama bu hiyerarşinin herhangi bir bölümü içinde .DS_Store dizinleri hala yoksayıldı değişmedi.
enorl76

Anladığım kadarıyla soru şuydu: Bunu her alt dizinde manuel olarak yapmadan tüm alt dizinlerde .DS_Store'un tüm oluşumlarını kolayca yok saymak. Ben de aynı problemi yaşadım. Aşağıdaki cevap bunun nasıl çözüleceğini göstermektedir (son 2 paragraf).
petrsyn

Yanıtlar:


647

Sanırım yaşadığınız sorun, bazı önceki işlemlerde, yanlışlıkla depoya .DS_Store dosyaları eklemiş olmanızdır. Tabii ki, bir dosya deponuzda izlendikten sonra, geçerli bir .gitignore dosyasındaki bir girişle eşleşse bile izlenmeye devam edecektir.

Deponuza eklenen .DS_Store dosyalarını el ile kaldırmanız gerekir. Kullanabilirsiniz git rm --cached .DS_Store. Kaldırıldıktan sonra git bunu görmezden gelmelidir. Yalnızca kök .gitignore dosyasında aşağıdaki satırı gerektiğinde: .DS_Store. Dönemi unutma!

git rm --cached .DS_Storeyalnızca .DS_Storegeçerli dizinden kaldırır . find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatchDepodan tümünü kaldırmak için kullanabilirsiniz .DS_Stores.

Keçe ipucu: Büyük olasılıkla .DS_Store dosyalarını dahil etmek istemediğiniz için genel bir kural oluşturun. İlk olarak, bir yerde küresel bir .gitignore dosyası oluşturun, örn echo .DS_Store >> ~/.gitignore_global. Artık tüm depolar için kullanmak için git söyle: git config --global core.excludesfile ~/.gitignore_global.

Bu sayfa sorunuzu yanıtlamama yardımcı oldu: https://help.github.com/articles/ignoring-files


41
Son 2 paragraf bu soruyu cevaplar. Teşekkürler.
petrsyn

70
´´git rm --cached .DS_Store´´ geçerli dizinden yalnızca bir .DS_Store kaldırır. ´´find kullanın. -adı .DS_Store -print0 | xargs -0 git rm --ignore-unmatch´´ tüm .DS_Stores repo kaldırmak için
auco

4
Yoksayılacak diğer yaygın dosyaların bir listesi kullanışlı olabilir
geotheory

14
Global kural IMO'sunu kullanmak için kötü fikir: Birden fazla kullanıcı / makinede global yapılandırmaları korumaya çalışmak hiç bir zaman işe yaramıyor - repodaki repo'nuzu yöneten kuralların olmasını istiyorsunuz. Kabul et
Yarin

15
Sana katılmıyorum. (Anlayışlı olduğunu düşündüğümden beri yorumunuzu iptal etsem de.) Global yaparsak, her mac kullanıcısının bunu yapması gerekir, ancak sadece bir kez. Depoyu geniş çapta yaparsak, bunu her depo için yapmamız gerekir. Seni tanımıyorum ama her zaman yeni depolar yapıyorum. Küresel olarak yaparak, kişi sorunu bir kez ve herkes için çözer.
Edward Newell

356

Ekle **/.DS_Storeiçine .gitignorealt dizin için


.DS_StoreZaten taahhüt edilmişse :

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

Bunları tüm depolarda yoksaymak için: (bazen adı verilir ._.DS_Store)

echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global

hala repoma yüklendi mi?
Freddy Sidauruk

@FreddySidauruk git rm --cached your_fileilk kullanın
ronald8192

@FreddySidauruk find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch, olmalıdır : stackoverflow.com/questions/18393498/…
ronald8192

1
İlgili -fklasörlerde açık dosyalarınız varsa ekleme yapılması gerekiyor gibi görünüyor :find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Mehmet Kaplan

158

.DS_Store git deponuza hiç eklenmediyse, .gitignore dosyanıza eklemeniz yeterlidir.

Bir dosyanız yoksa, adlı bir dosya oluşturun.

.gitignore

Uygulamanızın kök dizinine yazıp

**/.DS_Store

İçinde. Bu asla .DS_Store dosyasının git'inizde gizlenmesine izin vermez.

Ancak, zaten oradaysa, terminalinize yazın:

find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

ardından .DS_Store'u uzak deponuzdan kaldırmak için değişiklikleri uygulayın ve itin:

git commit -m "Remove .DS_Store from everywhere"

git push origin master

Ve şimdi .gitignore dosyanıza .DS_Store'u ekleyin ve ardından son 2 kod parçasını tekrar girin ve itin (git commit ..., git push ...)


3
Neden çift yıldız? Bu ne anlama geliyor?
MilanG

1
@MilanG, temelde 'bu dizinde ve tüm alt dizinlerde arama' anlamına gelen bir anahtar kelimedir.
lachie_h

1
Bunun çift yıldızın ne anlama geldiğinin mükemmel bir açıklaması olduğundan emin değilim. Bir joker karakterdir. Olabilir *ya **elde etmek istediğinize bağlı. Kabuğa dizinlerde nasıl gezinileceğini söylemenin bir yoludur. Bu stackoverflow cevabı tamamen açıklıyor stackoverflow.com/a/28199633/4092170
El'Magnifico

** asla gizli (./) dizinlerle eşleşmeyecek: facelessuser.github.io/wcmatch/glob
Jonathan

bu aslında çalışır ... cevap olarak işaretlenmesi gerekir
ichimaru

85

Sizin .gitignore dosyası bu gibi görünmelidir:

# Ignore Mac DS_Store files
.DS_Store

Eğik çizgi eklemediğiniz sürece, tüm dizinlerde dosya adıyla eşleştirilir. ( buradan )


hala repo
uplaoded

@FreddySidauruk o zaman çalıştırmak zorundagit rm --cached path/to/file/here
Sgnl

23

Adım 1, tüm *.DS_storedosyaları silin . Biri koşabilir

git rm -f *.DS_Store

ancak rm -fbir yazım hatası varsa bunun tehlikeli olabileceğini unutmayın! İkinci adım: ekle

*.DS_Store
.DS_Store

.gitignore için. Bu benim için çalıştı!


13

*.DS_Store.Gitignore dosyanıza ekleyin . Bu benim için mükemmel çalışıyor


11

Ayrıca --cached, Edward Newell'in orijinal yanıtında belirttiği gibi, yerel .DS_store dosyalarını korumak için bayrağı auco'nun cevabına ekleyebilirsiniz . Değiştirilmiş komut şuna benzer: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch..cheers ve teşekkürler!


5

Adım: 1) Bu komutu kullanarak mevcut dosyaları kaldırın

bulmak. -adı .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

Adım: 2) .gitignore dosyanıza .DS_Store'u ekleyin

Adım: 3) .gitignore git add .gitignore git commit -m dosyasındaki değişikliklerinizi yapın ".DS_Store" kaldırıldı


3
  1. $ git rm ./*.DS_Store - tüm .DS_Store'u git'ten kaldırın
  2. $ echo \.DS_Store >> .gitignore - gelecekte .DS_Store'u yoksay

taahhüt ve it

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.