Bagaimana saya bisa menghapus .DS_Store
file-file Mac OS X yang mengganggu itu dari repositori Git?
Bagaimana saya bisa menghapus .DS_Store
file-file Mac OS X yang mengganggu itu dari repositori Git?
Jawaban:
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!'
-exec
akan diluncurkan git-rm
sekali untuk setiap file .DS_Store, sementara xargs
akan meletakkan semua jalur pada satu baris perintah. Kebanyakan saya lebih suka xargs
karena saya tidak perlu khawatir melarikan diri banyak karakter khusus.
.DS_Store
untuk .gitignore
bekerja secara rekursif? Yaitu, apakah itu akan diabaikan some/level/of/folders/.DS_Store
juga?
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
~/.gitignore
sebagai 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 ~/.gitexcludes
sebaliknya melalui arahan yang sama:core.excludesfile
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.
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.
Jika Anda tidak dapat menghapus file karena mereka memiliki perubahan penggunaan bertahap:
git rm --cached -f *.DS_Store
Buka terminal dan ketik "cd <ProjectPath>"
Hapus file yang ada:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
Tambahkan ini .DS_Store
ketik "ctrl + x"
Ketik "y"
Masuk untuk menyimpan file
git add .gitignore
git commit -m '.DS_Store removed.'
nano .gitignore
membuat file jika tidak ada, perintah ini harus dijalankan dari folder root proyek
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 touch
file 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!'
Saya harus mengubah git-rm ke git rm di atas untuk membuatnya bekerja:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
hapus menggunakan git-rm
, dan kemudian tambahkan .DS_Store .gitignore
untuk menghentikannya ditambahkan lagi. Anda juga dapat menggunakan blueharvest untuk menghentikan mereka dibuat secara bersamaan
Jika Anda ingin menghapus file DS_Store ke setiap folder dan subfolder:
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
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
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
--cached
Opsi, simpan lokal Anda .DS_Store
karena akan direproduksi pula.
Dan seperti disebutkan di atas, tambahkan .DS_Store
ke file .gitignore pada root proyek Anda. Maka itu tidak akan lagi Anda lihat (dari repo).
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.
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
.
"*.DS_Store"
, agar tanda bintang dilewatkan ke find
bukannya diperluas oleh shell.
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
Ini bekerja untuk saya, kombo dua jawaban dari atas:
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.
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
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.
Tidak perlu menghapus .DS_STORE
secara lokal
Cukup tambahkan ke .gitignore
file
File .gitignore hanyalah file teks yang memberitahu Git file atau folder mana yang harus diabaikan dalam suatu proyek.
Perintah
nano .gitignore
.DS_Store
Kemudian klikCTRL+X > y > Hit Return
git status
Untuk melihat perubahan terakhir Andagit add .gitignore
git commit -m 'YOUR COMMIT MESSAGE'
git push origin master