.gitignore semua file .DS_Store di setiap folder dan subfolder

561

Saya telah menambahkan .DS_Store ke file .gitignore, tetapi tampaknya itu hanya mengabaikan .DS_Store di direktori root, tidak di setiap folder dan subfolder.

Bagaimana cara saya memperbaikinya?

vickyqiu
sumber
Bagaimana tepatnya Anda menambahkannya ke .gitignore? Itu harus bekerja di semua direktori (tidak untuk saya).
Thilo
Ini bekerja untuk saya juga. Saya juga mencoba ketika itu di akhir file, jika Anda harus memiliki baris baru (platform spesifik) tetapi itu tidak mengubah direktori .DS_Store dalam bagian hierarki mana pun masih diabaikan.
enorl76
Pertanyaan yang saya pahami adalah: Cara mudah mengabaikan semua kemunculan .DS_Store di semua subdirektori tanpa melakukan ini secara manual di setiap subdirektori. Saya memiliki masalah yang sama. Jawaban di bawah ini menunjukkan cara menyelesaikannya (2 paragraf terakhir).
petrsyn

Jawaban:

648

Saya pikir masalah yang Anda alami adalah bahwa di beberapa komit sebelumnya, Anda secara tidak sengaja menambahkan .DS_Storefile ke repositori. Tentu saja, setelah file dilacak dalam repositori Anda, itu akan terus dilacak bahkan jika itu cocok dengan entri dalam file .gitignore yang berlaku.

Anda harus menghapus .DS_Storefile yang ditambahkan ke repositori Anda secara manual . Kamu bisa menggunakan

git rm --cached .DS_Store

Setelah dihapus, git harus mengabaikannya. Anda hanya perlu baris berikut di root .gitignoreberkas: .DS_Store. Jangan lupa haid!

git rm --cached .DS_Store

hanya menghapus .DS_Storedari direktori saat ini. Kamu bisa menggunakan

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

untuk menghapus semua .DS_Storesdari repositori.

Kiat tip: Karena Anda mungkin tidak ingin memasukkan .DS_Storefile, buat aturan global. Pertama, buat .gitignorefile global di suatu tempat, mis

echo .DS_Store >> ~/.gitignore_global

Sekarang beri tahu git untuk menggunakannya untuk semua repositori:

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

Halaman ini membantu saya menjawab pertanyaan Anda.

Edward Newell
sumber
41
2 paragraf terakhir menjawab pertanyaan ini. Terima kasih.
petrsyn
70
´´git rm --cached .DS_Store´´ hanya menghapus satu .DS_Store dari direktori saat ini. Gunakan ´´find. -nama .DS_Store -print0 | xargs -0 git rm --ignore-unmatch´´ untuk menghapus semua .DS_Stores dari repo
auco
4
Daftar file-file umum lainnya untuk diabaikan mungkin berguna
geotheory
14
Gagasan buruk untuk menggunakan aturan global IMO: Mencoba mempertahankan konfigurasi global di banyak pengguna / mesin tidak pernah berfungsi - Anda ingin aturan yang mengatur repo Anda di repo itu sendiri. Setuju dengan ini
Yarin
15
Aku tidak setuju denganmu (Meskipun saya meningkatkan komentar Anda karena saya pikir itu berwawasan luas.) Jika kita melakukan global, maka setiap pengguna mac perlu melakukan itu, tetapi hanya sekali. Jika kita melakukan repositori lebar, maka kita perlu melakukan itu untuk setiap repositori. Saya tidak tahu tentang Anda, tetapi saya membuat repo baru sepanjang waktu. Dengan melakukannya secara global, seseorang memecahkan masalah sekali dan untuk semua.
Edward Newell
356

Tambahkan **/.DS_Storeke dalam .gitignoreuntuk sub direktori


Jika .DS_Storesudah berkomitmen:

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

Untuk mengabaikannya di semua repositori: (kadang-kadang diberi nama ._.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
ronald8192
sumber
masih diunggah ke repo saya?
Freddy Sidauruk
@FreddySidauruk gunakan git rm --cached your_filedulu
ronald8192
@FreddySidauruk Seharusnya find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch, dari: stackoverflow.com/questions/18393498/…
ronald8192
1
Tampaknya menambahkan -fdiperlukan jika Anda memiliki file terbuka di folder relavent:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Mehmet Kaplan
158

Jika .DS_Store tidak pernah ditambahkan ke repositori git Anda, cukup tambahkan ke file .gitignore Anda.

Jika Anda tidak memilikinya, buat file bernama

.gitignore

Di direktori root aplikasi Anda dan cukup tulis

**/.DS_Store

Di dalamnya. Ini tidak akan pernah mengizinkan file .DS_Store menyelinap di git Anda.

Tetapi, jika sudah ada, tulis di terminal Anda:

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

kemudian komit dan dorong perubahan untuk menghapus .DS_Store dari repo jarak jauh Anda:

git commit -m "Remove .DS_Store from everywhere"

git push origin master

Dan sekarang tambahkan .DS_Store ke file .gitignore Anda, dan kemudian komit dan dorong dengan 2 bagian terakhir dari kode (git commit ..., git push ...)

drjorgepolanco
sumber
3
Mengapa asterisk ganda? Apa artinya?
MilanG
1
@MilanG adalah kata kunci yang pada dasarnya berarti 'pencarian di direktori ini dan semua subdirektori'.
lachie_h
1
Tidak yakin itu adalah penjelasan yang sempurna tentang apa arti tanda bintang ganda. Itu adalah wildcard. Bisa *atau **tergantung apa yang ingin Anda raih. Ini adalah cara memberi tahu shell cara menavigasi direktori. Jawaban stackoverflow ini menjelaskan sepenuhnya stackoverflow.com/a/28199633/4092170
El'Magnifico
** tidak akan pernah cocok dengan direktori tersembunyi (./): facelessuser.github.io/wcmatch/glob
Jonathan
ini benar-benar berfungsi ... harus ditandai sebagai dijawab
ichimaru
85

File .gitignore Anda akan terlihat seperti ini:

# Ignore Mac DS_Store files
.DS_Store

Selama Anda tidak menyertakan garis miring, itu cocok dengan nama file di semua direktori. (dari sini )

Yarin
sumber
masih terangkat ke dalam repo
Freddy Sidauruk
@FreddySidauruk maka Anda harus menjalankangit rm --cached path/to/file/here
Sgnl
23

Langkah 1, hapus semua *.DS_storefile. Seseorang bisa berlari

git rm -f *.DS_Store

tapi ketahuilah bahwa itu rm -fbisa sedikit berbahaya jika Anda salah ketik! Langkah dua: tambahkan

*.DS_Store
.DS_Store

ke .gitignore. Ini berhasil untuk saya!

travelingbones
sumber
13

Tambahkan *.DS_Storeke file .gitignore Anda. Itu bekerja untuk saya dengan sempurna

Yakub
sumber
11

Anda juga dapat menambahkan --cachedtanda pada jawaban auco untuk mempertahankan file .DS_store lokal, seperti yang disebutkan Edward Newell dalam jawaban aslinya. Perintah yang dimodifikasi terlihat seperti ini: find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch..cheers dan terima kasih!

Andrew Wilhelm
sumber
5

Langkah: 1) Hapus file yang ada menggunakan perintah ini

Temukan . -nama .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

Langkah: 2) Tambahkan .DS_Store di file .gitignore Anda

Langkah: 3) Komit perubahan Anda di .gitignore git tambahkan .gitignore git komit -m "dihapus .DS_Store"

Wisnu
sumber
3
  1. $ git rm ./*.DS_Store - hapus semua .DS_Store dari git
  2. $ echo \.DS_Store >> .gitignore - abaikan .DS_Store di masa mendatang

komit & dorong

mate.gwozdz
sumber