Saya terpaksa menggunakan Windows 10 untuk proyek. Ya, saya lebih suka menggunakan GNU / Linux. Untuk menjaga kewarasan saya, saya sudah mencoba menganggap Windows sebagai bootloader untuk Emacs :)
Sayangnya, Magit (salah satu bagian favorit saya dari Emacs, yang juga menebus kurangnya baris perintah yang baik pada Windows) lambat sekali. Saya memiliki SSD, 16 GB RAM dan quad-core i7 tetapi butuh delapan detik untuk mengeksekusi magit-status
pada repositori kecil. Lalu, ketika saya ingin melakukan perubahan lain, dibutuhkan sekitar 5 detik per file .
Inilah yang saya coba:
$ git config --global core.preloadindex true
$ git config --global core.fscache true
$ git config --global gc.auto 256
- Menambahkan seluruh proyek ke daftar pengecualian Windows Defender (AV saya saja)
- Mengatur
magit-git-executable
ke msysgit biasa yang saya unduh ( https://git-for-windows.github.io/ ). Saya memeriksa dan inigit status
membutuhkan waktu <1 detik. Saya tahu itumagit-status
lebih banyak, tetapi ini terlalu banyak.
Adakah yang bisa menyarankan cara untuk membuat ini lebih cepat? Saya tidak bisa membayangkan orang menggunakan Magit di Windows seperti ini.
Disarankan bahwa pertanyaan ini adalah duplikat, tetapi mereka bertanya:
Saya berjuang untuk memahami mengapa Emacs memiliki waktu startup yang lebih singkat di Ubuntu daripada Windows. Adakah yang tahu jawabannya?
Saya tahu setidaknya beberapa alasan mengapa Emacs, Git, dan Magit lebih lambat di Windows. Saya bertanya bagaimana cara mengoptimalkan Magit untuk melakukan lebih sedikit, atau hasil cache, atau sesuatu, bahkan jika itu dengan mengorbankan fungsionalitas.
git-status
Dibutuhkan <1 detik? Ini harus pada dasarnya instan. Apakah ada penundaan yang jelas sama sekali?git
perintah yang setara dari baris perintah?magit-git-executable
mungkin akan sedikit lebih cepat (yang ada di dalamcmd
danbin
sebenarnya adalah pembungkus, jikaexecutable-find
mengembalikan salah satunya magit akan mencoba untuk mengaturmagit-git-executable
ke git "nyata"). 8 detik untuk repositori kecil terdengar seperti ada sesuatu yang salah, butuh ~ 0.8s untuk repo magit di sini (Windows 8).magit-refresh-verbose
ket
.Jawaban:
Saya sebenarnya telah melakukan banyak penelitian tentang ini dan pada dasarnya masalahnya adalah bahwa git untuk windows sucks
Ini adalah bug hulu: https://github.com/git-for-windows/git/issues/596 dan itu mengharuskan seseorang untuk menulis ulang skrip shell di C sehingga tidak ada lagi perintah forking. Bagi saya, ini adalah rebase interaktif yang merupakan pembunuh nyata (saya dapat memulai rebase interaktif, pergi membuat teh, kembali, membaca beberapa berita, minum teh, dan kemudian mungkin sudah selesai. Ini jauh lebih buruk daripada banyak orang pikir itu), tetapi panggilan umum seperti status juga cukup untuk mengganggu langkah kerja.
Alternatif lain adalah memperbarui jGit untuk mendukung perintah yang digunakan magit, dan kemudian menjalankannya di nailgun untuk mengurangi waktu startup JVM, saya memulai utas untuk membahas ini: http://dev.eclipse.org/mhonarc/lists/ jgit-dev / msg03064.html
Anda mungkin ingin membaca /programming/4485059 untuk beberapa speedup potensial, tetapi jujur Anda hampir tidak akan melihatnya.
Sesuatu yang dapat Anda lakukan di magit adalah mengikuti saran penulis dalam menyiapkan minimal
magit-status
hanya untuk pementasanjadi, apakah Anda tahu pengembang C atau Java berpengalaman yang dapat membantu dengan salah satu solusi untuk memperbaiki git atau jGit?
sumber
magit-status
membutuhkan waktu yang sangat lama juga, dan saya tidak berpikir status menggunakan banyak skrip shell.magit-status
kode "minimal" itu, sepertinya sedikit membantu saya (ini mengurangimagit-refresh
waktu saya menjadi 2-3 detik).magit-staging
butuh beberapa detik untuk saya juga. Cukup untuk mengganggu pikiranku, tetapi tidak cukup untuk menghancurkan hariku.magit-status
lambat adalah karena memanggilgit
mungkin 10 atau 20 kali. Memulai proses baru pada Windows sangat lambat dibandingkan dengan platform GNU. Script shell adalah kasus ekstrim dari ini (karena hampir setiap pernyataan adalah proses baru)Baru-baru ini melihat daftar
call-process
panggilan darimagit-status
untuk alasan lain, saya sadar bahwa beberapa dari mereka dapat di-cache. Dengan saran berikutmagit-status
tentang repo Magit berjalan dari 1,9 menjadi 1,3 detik (pengukuran saya sebelumnya 0,8 disebutkan dalam komentar adalah untuk komputer yang berbeda (lebih cepat)). Jika Anda sudah menggunakanmagit-staging
jawaban lain, mungkin tidak akan banyak membantu: Saya melihat pengurangan dari 0,16 menjadi 0,12 detik (tapi itu hampir tidak lebih besar dari pengukuran noise).PERINGATAN: Ini tidak perlu memperbarui cache, jadi ada masalah (terutama jika Anda mengutak-atik konfigurasi git Anda).
sumber
nil
.