Bagaimana saya bisa menghapus file .DS_Store dari repositori Git?

Jawaban:

2430

Hapus file yang ada dari repositori:

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

Tambahkan baris

.DS_Store

ke file .gitignore, yang dapat ditemukan di tingkat atas repositori Anda (atau dibuat jika belum ada di sana). Anda dapat melakukan ini dengan mudah dengan perintah ini di direktori teratas

echo .DS_Store >> .gitignore

Kemudian

git add .gitignore
git commit -m '.DS_Store banished!'
benzado
sumber
13
Ini benar-benar sepele, tetapi menggunakan -execakan diluncurkan git-rmsekali untuk setiap file .DS_Store, sementara xargsakan meletakkan semua jalur pada satu baris perintah. Kebanyakan saya lebih suka xargskarena saya tidak perlu khawatir melarikan diri banyak karakter khusus.
benzado
8
Ini harus menggunakan .git / info / mengecualikan, bukan .gitignore. Lihat stackoverflow.com/questions/1753070/… untuk penjelasan perbedaan keduanya.
Andrew Grimm
106
@Andrew: Saya tidak setuju. Ini tidak akan pernah berguna untuk file .DS_Store untuk diperiksa, sehingga lebih masuk akal sebagai pengaturan semua-pengguna, lebar-repositori, daripada sesuatu yang perlu diingat setiap pengguna Mac untuk mengatur pada mesinnya sendiri.
benzado
51
Apakah menambahkan .DS_Storeuntuk .gitignorebekerja secara rekursif? Yaitu, apakah itu akan diabaikan some/level/of/folders/.DS_Storejuga?
Charlie Schliesser
70
@CharlieS Ya, jika polanya tidak mengandung garis miring, cocok dengan nama file di semua direktori.
benzado
239

Menggabungkan jawaban benzado dan webmat, memperbarui dengan git rm, tidak gagal pada file yang ditemukan tidak dalam repo, dan menjadikannya dapat di-paste secara umum untuk setiap pengguna:

# 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
Turadg
sumber
2
Saya menemukan bahwa ketika menggunakan git repo di direktori home saya (AKA a "dotfiles" repo), memiliki ~/.gitignoresebagai global tidak termasuk file saya sangat menyebalkan . Ada file yang ingin saya kecualikan dari direktori home saya yang tidak ingin saya abaikan secara global. Saya menggunakan ~/.gitexcludessebaliknya melalui arahan yang sama:core.excludesfile
AL X
156

Solusi terbaik untuk mengatasi masalah ini adalah dengan mengabaikan file-file ini dari semua git repo di sistem Anda. Ini dapat dilakukan dengan membuat file global gitignore seperti:

vi ~/.gitignore_global

Menambahkan Aturan untuk mengabaikan file seperti:

# 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

Sekarang, tambahkan file ini ke konfigurasi global git Anda:

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

Edit:

Dihapus Ikon karena mereka mungkin perlu berkomitmen sebagai aset aplikasi.

Saraf
sumber
Anda juga bisa menambahkan aturan di atas di .gitignore repositori Anda. Ini akan menjauhkan file-file ini pada level repo jika ada banyak kontributor untuk proyek Anda. Namun, dalam kasus seperti itu, .gitignore harus menangani file spesifik setiap OS, dll. Jika pengembang yang berbeda menggunakan OS yang berbeda. Seperti aturan untuk linux, OSX dll.
Saraf
Saya akan merekomendasikan bahwa setiap pengembang berurusan dengan file spesifik os-nya di .global_ignore sendiri, dengan cara itu proyek .gitignore adalah spesifik proyek.
mcfedr
harus dijalankan: git add .gitignore_global, agar programmer lain memiliki file itu juga di lingkungan lokalnya?
stackdave
58

Dalam beberapa situasi Anda mungkin juga ingin mengabaikan beberapa file secara global. Bagi saya, .DS_Store adalah salah satunya. Begini caranya:

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

(Atau file apa pun pilihan Anda)

Kemudian edit file seperti .gitignore repo. Perhatikan bahwa saya pikir Anda harus menggunakan jalur absolut.

webmat
sumber
26

Jika Anda tidak dapat menghapus file karena mereka memiliki perubahan penggunaan bertahap:

git rm --cached -f *.DS_Store
Reggie Pinkham
sumber
19

Buka terminal dan ketik "cd <ProjectPath>"

  1. Hapus file yang ada: find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

  2. nano .gitignore

  3. Tambahkan ini .DS_Store

  4. ketik "ctrl + x"

  5. Ketik "y"

  6. Masuk untuk menyimpan file

  7. git add .gitignore

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

Karthick Vadivel
sumber
nano .gitignoremembuat file jika tidak ada, perintah ini harus dijalankan dari folder root proyek
Saif
17

Jawaban pilihan teratas memang luar biasa, tetapi membantu pemula seperti saya, berikut adalah cara membuat file .gitignore, mengeditnya, menyimpannya, menghapus file yang mungkin sudah Anda tambahkan ke git, lalu mendorong file ke Github.

Buat file .gitignore

Untuk membuat file .gitignore, Anda bisa hanya touchfile yang membuat file kosong dengan nama yang ditentukan. Kami ingin membuat file bernama .gitignore sehingga kami dapat menggunakan perintah:

touch .gitignore

Abaikan file

Sekarang Anda harus menambahkan baris yang memberitahu git untuk mengabaikan file DS Store ke .gitignore Anda. Anda dapat menggunakan editor nano untuk melakukan ini.

nano .gitignore

Nano itu baik karena itu berisi instruksi tentang cara keluar dari situ. ( Ctrl- Ountuk menyimpan, Ctrl- Xuntuk keluar)

Salin dan tempel beberapa ide dari inti Github ini yang mencantumkan beberapa file umum yang harus diabaikan. Yang paling penting, untuk menjawab pertanyaan ini, adalah:

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

# Adalah komentar, dan akan membantu Anda mengatur file Anda seiring bertambahnya.

Ini artikel Github juga memiliki beberapa ide umum dan pedoman.

Hapus file yang sudah ditambahkan ke git

Akhirnya, Anda harus benar-benar menghapus file DS Store dari direktori Anda.

Gunakan perintah hebat ini dari jawaban pilihan teratas. Ini akan melalui semua folder di direktori Anda, dan menghapus file-file itu dari git.

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

Dorong .gitignore hingga Github

Langkah terakhir, Anda harus benar-benar melakukan file gitignore Anda.

git status

git add .gitignore

git commit -m '.DS_Store banished!'

Joshua Dance
sumber
3
perintah sentuh pada langkah Anda tidak perlu ... nano akan membuat file untuk Anda.
Corey Goldberg
1
Saya menemukan jawaban saya sendiri 2 tahun kemudian dan menggunakannya. Kerja bagus melewati saya. :)
Joshua Dance
Bekerja dengan sempurna !! Terima kasih
iUser
15

Saya harus mengubah git-rm ke git rm di atas untuk membuatnya bekerja:

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

hapus menggunakan git-rm, dan kemudian tambahkan .DS_Store .gitignoreuntuk menghentikannya ditambahkan lagi. Anda juga dapat menggunakan blueharvest untuk menghentikan mereka dibuat secara bersamaan

Nathan
sumber
9

Jika Anda ingin menghapus file DS_Store ke setiap folder dan subfolder:


Dalam hal DS_Store sudah berkomitmen:

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

Abaikan mereka dengan:

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

sumber
8

Berikut ini bekerja paling baik untuk saya. Menangani file yang tidak cocok, dan file dengan modifikasi lokal. Sebagai referensi, ini ada di sistem Mac 10.7 yang menjalankan git 1.7.4.4.

Temukan dan hapus:

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

Saya juga secara global mengabaikan .DS_Store di semua repositori dengan menetapkan core.excludesfile global.

Pertama, buat file (jika belum ada):

touch ~/.gitignore

Kemudian tambahkan baris berikut dan simpan:

.DS_Store

Sekarang konfigurasikan git untuk menghormati file secara global:

git config --global core.excludesfile ~/.gitignore
jordantbro
sumber
8

Gunakan perintah ini untuk menghapus file yang ada:

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

Lalu tambahkan .DS_Storeke.gitignore

Cerah
sumber
6

Saya menemukan bahwa baris berikut dari snipplr paling baik menghapus semua .DS_Store, termasuk yang memiliki modifikasi lokal.

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

--cachedOpsi, simpan lokal Anda .DS_Storekarena akan direproduksi pula.

Dan seperti disebutkan di atas, tambahkan .DS_Storeke file .gitignore pada root proyek Anda. Maka itu tidak akan lagi Anda lihat (dari repo).

manat
sumber
5

Saya agak terlambat ke pesta, tapi saya punya jawaban yang bagus. Untuk menghapus file .DS_Store, gunakan perintah berikut dari jendela terminal, tetapi berhati-hatilah menghapus file dengan 'find'. Menggunakan nama tertentu dengan opsi -nama adalah salah satu cara yang lebih aman untuk menggunakannya:

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

Anda dapat mengabaikan "-delete" jika Anda hanya ingin daftar mereka sebelum dan sesudah. Itu akan meyakinkan Anda bahwa mereka pergi.

Sehubungan dengan saran ~ / .gitignore_global: hati-hati di sini. Anda ingin menempatkan file yang bagus ke .gitignore di tingkat atas setiap workarea dan komit, sehingga siapa pun yang mengkloning repo Anda akan mendapatkan manfaat dari penggunaannya.

zeozod
sumber
4

Ini akan berhasil:

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

Ini menghapus semua file yang namanya diakhiri dengan .DS_Store, termasuk ._.DS_Store.

John Topley
sumber
3
Tanda bintang seharusnya tidak ada di sana.
Aristotle Pagaltzis
3
asterisk harus ada di sana karena saya menemukan file .DS_Store dan ._. DS_Store di sistem mac saya.
MutantMahesh
3
@MutantMahesh. Dalam hal ini, Anda perlu "*.DS_Store", agar tanda bintang dilewatkan ke findbukannya diperluas oleh shell.
TRiG
4

Untuk beberapa alasan tidak satu pun di atas berfungsi pada mac saya.

Solusi saya adalah dari terminal run:

rm .DS_Store

Kemudian jalankan perintah berikut:

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

Saat menginisialisasi repositori Anda, lewati perintah git yang berisi

-u

dan itu seharusnya tidak menjadi masalah.

dav1dhunt
sumber
1
Bagaimana jika orang lain membuat repo, dan OP hanya menyinkronkannya?
jww
3

Ini bekerja untuk saya, kombo dua jawaban dari atas:

  • $ git rm --cached -f * .DS_Store
  • $ git commit -m "cabang-filter --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
  • $ git push master asal - memaksa
JLunceford
sumber
3

Hapus file yang diabaikan:

(.DS_Store)

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

Ada beberapa solusi untuk menyelesaikan masalah ini. Untuk menghindari membuat file .DS_Store, jangan gunakan OS X Finder untuk melihat folder. Cara alternatif untuk melihat folder adalah dengan menggunakan baris perintah UNIX. Untuk menghapus file .DS_Store, produk pihak ketiga yang disebut DS_Store Terminator dapat digunakan. Untuk menghapus file .DS_Store dari seluruh sistem, perintah UNIX shell dapat digunakan. Luncurkan Terminal dari Aplikasi: Utilitas Pada UNIX shell prompt masukkan perintah UNIX berikut: sudo find / -name ".DS_Store" -depth -exec rm {} \; Saat diminta kata sandi, masukkan kata sandi Administrator Mac OS X.

Perintah ini adalah untuk menemukan dan menghapus semua kemunculan .DS_Store mulai dari root (/) dari sistem file melalui seluruh mesin. Untuk mengkonfigurasi perintah ini agar dijalankan sebagai tugas terjadwal, ikuti langkah-langkah di bawah ini: Luncurkan Terminal dari Aplikasi: Utilitas Pada prompt UNIX shell masukkan perintah UNIX berikut:

sudo crontab -e Saat diminta kata sandi, masukkan kata sandi Administrator Mac OS X. Setelah di vi editor tekan huruf I pada keyboard Anda sekali dan masukkan yang berikut ini:

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

Ini disebut entri crontab, yang memiliki format berikut:

Minute Hour DayOfBulan Bulan DayOfWeek Perintah Pengguna.

Entri crontab berarti bahwa perintah akan dieksekusi oleh sistem secara otomatis pada pukul 1:15 setiap hari oleh akun yang disebut root.

Perintah dimulai dari find all to. Jika sistem tidak berjalan, perintah ini tidak akan dijalankan.

Untuk menyimpan entri, tekan tombol Esc sekali, lalu secara bersamaan tekan Shift + z + z.

Catatan: Informasi dalam Langkah 4 hanya untuk editor vi.

vinny
sumber
2

tambahkan ini ke file .gitignore Anda

#Ignore folder mac
.DS_Store

simpan ini dan buat komit

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

dan sekarang Anda mengabaikan ini untuk semua komitmen Anda

Ezequiel García
sumber
2

buat .gitignorefile menggunakan perintahtouch .gitignore

dan tambahkan baris berikut di dalamnya

.DS_Store

simpan .gitignorefile dan kemudian dorong ke repo git Anda.

2rahulsk
sumber
2

Cara terbaik untuk menyingkirkan file ini selamanya dan tidak perlu khawatir lagi adalah

buat file global .gitignore:

echo .DS_Store >> ~ / .gitignore_global

Dan beri tahu git bahwa Anda ingin menggunakan file ini untuk semua repositori Anda:

git config --global core.excludesfile ~ / .gitignore_global Dan itu dia! .DS_Store keluar dari jalan Anda.

Kasem007
sumber
1

Tidak perlu menghapus .DS_STOREsecara lokal

Cukup tambahkan ke .gitignorefile

File .gitignore hanyalah file teks yang memberitahu Git file atau folder mana yang harus diabaikan dalam suatu proyek.

Perintah

  • nano .gitignore
  • Tulis .DS_StoreKemudian klikCTRL+X > y > Hit Return
  • git status Untuk melihat perubahan terakhir Anda
  • git add .gitignore
  • git commit -m 'YOUR COMMIT MESSAGE'
  • git push origin master
Wael Assaf
sumber