Git deposundan .DS_Store dosyalarını nasıl kaldırabilirim?


1257

Bu sinir bozucu Mac OS X .DS_Storedosyalarını Git deposundan nasıl kaldırabilirim ?



Bunun sadece Mac OS X'te değil, MacOS'un birçok sürümünde aynı olduğunu düşünün.
Jim Aho

Https://github.com/xiaozhuai/odourless adresini kontrol edin , .DS_Store'u önlemek için bir araç hazırladım.
xiaozhuai

Yanıtlar:


2427

Mevcut dosyaları depodan kaldırın:

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

Satırı ekleyin

.DS_Store

dosyaya .gitignore(zaten yoksa ya oluşturulmuş) depo üst düzeyinde bulunabilir. Bunu üst dizindeki bu komutla kolayca yapabilirsiniz

echo .DS_Store >> .gitignore

Sonra

git add .gitignore
git commit -m '.DS_Store banished!'

13
Bu gerçekten önemsiz, ancak her bir .DS_Store dosyası için kullanmak bir kez -execbaşlatılırken git-rm, xargstüm yolları tek bir komut satırına koyacaktır. Çoğunlukla tercih ederim xargsçünkü birçok özel karakterden kaçmak için endişelenmem gerekmiyor.
benzado

8
Bu .gitignore değil .git / info / exclude kullanmalıdır. İkisi arasındaki farkın açıklaması için stackoverflow.com/questions/1753070/… adresine bakın .
Andrew Grimm

106
@Andrew: Kabul etmiyorum. Bir .DS_Store dosyasının teslim edilmesi hiçbir zaman yararlı olmaz, bu nedenle her Mac kullanıcısının kendi makinesinde ayarlamayı hatırlaması gereken bir şey yerine, depo genelindeki tüm kullanıcılar ayarı olarak daha anlamlı olur.
benzado

51
Ekleme özyinelemeli .DS_Storeolarak .gitignoreçalışıyor mu? Yani, görmezden gelecek some/level/of/folders/.DS_Storemi?
Charlie Schliesser

70
@CharlieS Evet, desen eğik çizgi içermiyorsa, tüm dizinlerde dosya adıyla eşleştirilir.
benzado

239

Benzado ve webmat'ın cevaplarını birleştirmek, güncellemek, repoda bulunmayan git rmdosyalarda başarısız olmak ve herhangi bir kullanıcı için genel olarak yapıştırılabilir hale getirmek:

# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore

2
Benim ana dizin (AKA bir "dotfiles" repo) git repo kullanırken, ~/.gitignorebenim küresel dışlar dosya olarak sahip bir acı olduğunu bulundu. Ben bu benim ev dizinden dışlamak istediğiniz dosya yok yok küresel görmezden istiyorum. Bunun ~/.gitexcludesyerine aynı direktifle kullanıyorum:core.excludesfile
AL X

156

Bu sorunu çözmek için en iyi çözüm, bu dosyaları sisteminizdeki tüm git depolarından Global olarak yok saymaktır. Bu, aşağıdaki gibi genel bir gitignore dosyası oluşturarak yapılabilir:

vi ~/.gitignore_global

Aşağıdaki gibi dosyaları görmezden gelmek için Kurallar Ekleme:

# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log
*.sql
*.sqlite

# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

Şimdi bu dosyayı global git config'inize ekleyin:

git config --global core.excludesfile ~/.gitignore_global

Düzenle:

Simgeler, uygulama varlıkları olarak işlem görmeleri gerekebileceğinden kaldırıldı.


Yukarıdaki kuralları deponuzun .gitignore dosyasına da ekleyebilirsiniz. Bu, projenize birden çok katkıda bulunan varsa bu dosyaları repo düzeyinde uzak tutar. Ancak, bu gibi durumlarda, farklı geliştiriciler farklı işletim sistemi kullanıyorsa, .gitignore her işletim sisteminin belirli dosyalarıyla vb. İlgilenmelidir. Linux, OSX vb. Kurallar gibi
Sinir

Ben her geliştirici kendi .global_ignore kendi os belirli dosyaları ile ilgilenir, böylece proje .gitignore projeye özgü tavsiye ederim.
mcfedr

Çalıştırmak gerekir: git add .gitignore_global, başka bir programcının yerel dosyasında da bu dosyaya sahip olması için?
stackdave

58

Bazı durumlarda, bazı dosyaları dünya genelinde yok saymak isteyebilirsiniz. Benim için .DS_Store bunlardan biri. Bunu nasıl yapacağınız aşağıda açıklanmıştır:

git config --global core.excludesfile /Users/mat/.gitignore

(Veya istediğiniz herhangi bir dosya)

Ardından dosyayı tıpkı bir repo'nun .gitignore'u gibi düzenleyin. Mutlak bir yol kullanmanız gerektiğini düşünüyorum.


26

Aşamalı kullanım değişikliklerinden dolayı dosyaları kaldıramıyorsanız:

git rm --cached -f *.DS_Store

19

Terminali açın ve "cd <ProjectPath>" yazın

  1. Mevcut dosyaları kaldırın: find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

  2. nano .gitignore

  3. Bunu ekle .DS_Store

  4. "ctrl + x" yazın

  5. "Y" yazın

  6. Dosyayı kaydetmek için girin

  7. git add .gitignore

  8. git commit -m '.DS_Store removed.'


nano .gitignoreyoksa dosyayı oluşturur, bu komut proje kök klasöründen yürütülmelidir
Saif

17

En çok oy alan cevap harika, ama benim gibi çaylaklara yardımcı olmak için .gitignore dosyasını nasıl oluşturacağınız, düzenleyeceğiniz, kaydedeceğiniz, git'e zaten eklemiş olabileceğiniz dosyaları nasıl kaldıracağınız, ardından dosyayı Github'a nasıl göndereceğiniz aşağıda açıklanmıştır.

.Gitignore dosyasını oluşturun

Bir .gitignore dosyası oluşturmak için, yalnızca touchbelirtilen ada sahip boş bir dosya oluşturan dosyayı oluşturabilirsiniz. Şu komutu kullanabilmemiz için .gitignore adlı dosyayı oluşturmak istiyoruz:

touch .gitignore

Dosyaları yoksay

Şimdi git'e DS Mağazası dosyalarını .gitignore'unuza yoksaymasını söyleyen satırı eklemelisiniz. Bunu yapmak için nano düzenleyiciyi kullanabilirsiniz.

nano .gitignore

Nano güzel çünkü ondan nasıl çıkacağınıza dair talimatlar içeriyor. ( Ctrl- Okaydetmek, Ctrl- Xçıkmak için)

Yok sayılacak bazı yaygın dosyaları listeleyen bu Github özetine ait bazı fikirleri kopyalayıp yapıştırın . Bu soruyu cevaplamak için en önemlileri:

# OS generated files #
######################
.DS_Store
.DS_Store?

# Yorumdur ve dosyanızı büyüdükçe düzenlemenize yardımcı olur.

Bu Github makalesinde ayrıca bazı genel fikirler ve yönergeler vardır.

Git'e önceden eklenmiş dosyaları kaldırın

Son olarak, bu DS Mağazası dosyalarını dizininizden kaldırmanız gerekir.

En iyi oyu alan cevaptan bu harika komutu kullanın. Bu işlem dizininizdeki tüm klasörlerden geçecek ve bu dosyaları git'ten kaldıracaktır.

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

.Gitignore'u Github'a kadar itin

Son adım, .gitignore dosyanızı gerçekten yürütmeniz gerekir.

git status

git add .gitignore

git commit -m '.DS_Store banished!'


3
adımlarınızdaki dokunmatik komut gerekli değildir ... nano dosyayı sizin için oluşturur.
Corey Goldberg

1
2 yıl sonra kendi cevabımı buldum ve kullandım. İyi iş çıkardım. :)
Joshua Dance

Mükemmel çalıştı !! Teşekkürler
iUser

15

Ben işe almak için yukarıdaki git rm git-rm değiştirmek zorunda kaldı:

find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print

10

kullanarak silin git-rmve ardından .gitignoreyeniden eklenmelerini durdurmak için .DS_Store ekleyin . Ayrıca, hepsini birlikte oluşturulmalarını durdurmak için blueharvest'i de kullanabilirsiniz.


9

DS_Store dosyalarını her klasöre ve alt klasöre kaldırmak istiyorsanız:


Önceden taahhüt edilmiş DS_Store durumunda:

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

Bunları yoksay:

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

8

Aşağıdaki benim için en iyi çalıştı. Eşleşmeyen dosyaları ve yerel değişikliklere sahip dosyaları işledi. Referans olarak, bu git 1.7.4.4 çalıştıran bir Mac 10.7 sistemindeydi.

Bulun ve kaldırın:

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

Ayrıca global bir core.excludesfile ayarlayarak .DS_Store'u tüm depolarda yoksayıyorum.

İlk olarak, dosyayı oluşturun (henüz mevcut değilse):

touch ~/.gitignore

Ardından aşağıdaki satırı ekleyin ve kaydedin:

.DS_Store

Şimdi git'i global olarak dosyaya saygı duyacak şekilde yapılandır:

git config --global core.excludesfile ~/.gitignore

8

Varolan dosyaları kaldırmak için bu komutu kullanın:

find . -name '*.DS_Store' -type f -delete

Sonra eklemek .DS_Storeiçin.gitignore


6

Snipplr'den gelen aşağıdaki satırın .DS_Store, yerel modifikasyonlara sahip biri de dahil olmak üzere hepsini silmede en iyisini yaptığını buldum .

find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print

--cachedseçeneği, .DS_Storeyine de çoğaltılacağı için yerel tutar .

Ve yukarıda da belirtildiği gibi, .DS_Storeprojenizin kökündeki .gitignore dosyasına ekleyin . O zaman artık (depoların) görünüründe olmayacak.


5

Partiye biraz geç kaldım, ama iyi bir cevabım var. .DS_Store dosyalarını kaldırmak için bir terminal penceresinden aşağıdaki komutları kullanın, ancak 'find' ile dosyaları silmeye çok dikkat edin. -Name seçeneğiyle belirli bir ad kullanmak, onu kullanmanın daha güvenli yollarından biridir:

cd directory/above/affected/workareas
find . -name .DS_Store -delete

Onları önce ve sonra listelemek istiyorsanız "-delete" yazabilirsiniz. Bu onların gittiklerini garanti eder.

~ / .Gitignore_global tavsiyesi ile ilgili olarak: burada dikkatli olun. Bu güzel dosyayı her çalışma alanının en üst düzeyindeki .gitignore içine yerleştirmek ve taahhüt etmek istersiniz, böylece repo'nuzu klonlayan herkes kullanımından yararlanır.


4

Bu çalışacak:

find . -name "*.DS_Store" -type f -exec git-rm {} \;

Bu isimleri ile biten tüm dosyaları siler .DS_Storedahil ._.DS_Store.


3
Yıldız işareti orada olmamalıdır.
Aristotle Pagaltzis

3
Mac sistemimde .DS_Store ve ._. DS_Store dosyaları bulduğum için yıldız işareti bulunmalıdır.
MutantMahesh

3
@MutantMahesh. Bu durumda, "*.DS_Store"yıldız işaretinin findkabuk tarafından genişletilmek yerine geçirilmesi gerekir .
TRiG

4

Bir nedenden dolayı yukarıdakilerin hiçbiri mac'umda çalışmadı.

Benim çözüm terminal çalıştırmak:

rm .DS_Store

Sonra aşağıdaki komutu çalıştırın:

git pull origin master

3
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force

3

Deponuzu başlatırken, aşağıdakileri içeren git komutunu atlayın

-u

ve bu bir sorun olmamalı.


1
Ya bir başkası repo yarattıysa ve OP sadece onunla senkronize oluyorsa?
jww

3

Bu benim için çalıştı, yukarıdan iki cevaptan oluşan kombo:

  • $ git rm --cached -f * .DS_Store
  • $ git commit -m "filtre-dalı --dizin-filtre 'git rm --cached --ignore-unmatch .DS_Store"
  • $ git push origin master - kuvvet

3

Yoksayılan dosyaları kaldır:

(.DS_Store)

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

2

Bu sorunu çözmek için birkaç çözüm vardır. .DS_Store dosyaları oluşturmaktan kaçınmak için, klasörleri görüntülemek için OS X Finder'ı kullanmayın. Klasörleri görüntülemenin alternatif bir yolu, UNIX komut satırını kullanmaktır. .DS_Store dosyalarını kaldırmak için DS_Store Terminator adlı üçüncü taraf bir ürün kullanılabilir. .DS_Store dosyalarını tüm sistemden silmek için bir UNIX kabuk komutu kullanılabilir. Terminal'i Uygulamalar'dan Başlatın: Yardımcı Programlar UNIX kabuk istemine aşağıdaki UNIX komutunu girin: sudo find / -name ".DS_Store" -depth -exec rm {} \; Parola istendiğinde Mac OS X Yönetici parolasını girin.

Bu komut, dosya sisteminin kökünden (/) tüm makine boyunca başlayarak tüm .DS_Store oluşumlarını bulmak ve kaldırmaktır. Bu komutu zamanlanmış görev olarak çalışacak şekilde yapılandırmak için aşağıdaki adımları izleyin: Terminal'i Uygulamalar'dan başlatın: Yardımcı Programlar UNIX kabuk istemine aşağıdaki UNIX komutunu girin:

sudo crontab -e Parola istendiğinde Mac OS X Yönetici parolasını girin. Vi düzenleyicisine girdikten sonra klavyenizdeki I harfine bir kez basın ve aşağıdakileri girin:

15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;

Bu, aşağıdaki biçime sahip crontab girişi olarak adlandırılır:

Dakika Saat GünOfAyın Ay GünOfWeek Kullanıcı Komutu.

Crontab girişi, komutun sistem tarafından root adı verilen hesap tarafından her gün 01: 15'te otomatik olarak yürütüleceği anlamına gelir.

Komut, en baştan sonuna kadar bulmaktan başlar. Sistem çalışmıyorsa, bu komut yürütülmez.

Girişi kaydetmek için Esc tuşuna bir kez basın, ardından Shift + z + z tuşlarına aynı anda basın.

Not: 4. Adımdaki bilgiler yalnızca vi düzenleyicisi içindir.


2

bunu dosyanıza ekleyin .gitignore

#Ignore folder mac
.DS_Store

bunu kaydet ve taahhütte bulun

git add -A
git commit -m "ignore .DS_Store"

ve şimdi bunu tüm taahhütleriniz için görmezden geliyorsunuz


2

.gitignorekomutunu kullanarak dosya oluşturtouch .gitignore

ve içine aşağıdaki satırları ekleyin

.DS_Store

.gitignoredosyayı kaydedin ve git deponuza aktarın.


2

Bu dosyadan sonsuza kadar kurtulmanın ve bir daha asla endişelenmenizin en iyi yolu

genel bir .gitignore dosyası oluşturun:

echo .DS_Store >> ~ / .gitignore_global

Ve git bu dosyayı tüm depolarınız için kullanmak istediğinizi bildirin:

git config - global core.excludesfile ~ / .gitignore_global İşte bu kadar! .DS_Store yolunuzdan çıktı.


1

.DS_STOREYerel olarak kaldırmanıza gerek yok

Sadece .gitignoredosyaya ekleyin

.Gitignore dosyası, Git'e bir projede hangi dosya veya klasörlerin yoksayılmasını bildiren bir metin dosyasıdır.

Komutları

  • nano .gitignore
  • Yaz .DS_StoreSonra tıklayınCTRL+X > y > Hit Return
  • git status Yaptığınız değişikliklere son bir göz atmak için
  • git add .gitignore
  • git commit -m 'YOUR COMMIT MESSAGE'
  • git push origin master
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.