Saya telah menggunakan Git pada Windows dan Ubuntu selama pengembangan proyek kecil, sering membalik-balik di antara keduanya. Masalahnya adalah bahwa Git Bash secara konsisten menjadi lambat.
Ketika saya mengatakan lambat, maksud saya menjalankan cd
membutuhkan waktu antara 8-25 detik, menjalankan git
perintah memakan waktu 5-20 detik, dan ls
kadang-kadang bisa memakan waktu hingga 30 detik. Tak perlu dikatakan, ini tidak menyenangkan, belum lagi tidak produktif. Saya tahu Git lebih lambat di Windows, tapi ini konyol.
Satu-satunya solusi yang berfungsi - untuk sementara - bagi saya adalah menonaktifkan koneksi jaringan saya (seperti yang disarankan dalam jawaban ini ), mulai Git Bash, dan kemudian sambungkan kembali. Terkadang terus berjalan cepat selama berhari-hari setelah melakukan itu, tetapi kinerjanya selalu menurun pada akhirnya. Saya telah menjelajah melalui grup diskusi msysgit, Stack Overflow, daftar masalah msysgit, dll. Selama dan minggu, tetapi saya belum dapat menemukan solusi yang berfungsi.
Sejauh ini, saya sudah mencoba:
- Menambahkan folder Git & proyek ke daftar pengecualian pemindai virus
- Menonaktifkan pemindai virus saya sepenuhnya (Kaspersky IS 2011)
- Memastikan bahwa Outlook tidak berjalan (Outlook 2007)
- Mematikan semua aplikasi lain
- Menjalankan Git Bash sebagai administrator
- Menonaktifkan koneksi jaringan, memulai Git Bash, dan menjaga koneksi dinonaktifkan
- Menonaktifkan koneksi jaringan, memulai Git Bash, mengaktifkan kembali koneksi (hanya berfungsi sesekali)
- Lari
git gc
- Dan kombinasi di atas
Saya memang membaca bahwa beberapa orang telah berhasil menonaktifkan penyelesaian Bash, tetapi idealnya saya ingin tetap aktif. Versi msysgit adalah 1.7.3.1-preview20101002 & OS adalah Windows 7 x64. Menjalankan hal yang sama di Linux, bisa ditebak, cepat kilat. Saya akan menggunakan Linux secara eksklusif, tetapi saya juga perlu menjalankan hal-hal di Windows (aplikasi tertentu, pengujian, dll.).
Adakah yang mengalami masalah serupa? Jika demikian, apa masalah yang mendasarinya dan apa solusinya (jika ada)?
Ini melampaui hanya repositori Git, tetapi hanya untuk referensi, repositori yang saya gunakan dengan Git cukup kecil: ~ maksimum 4-50 file.
Jawaban:
Anda dapat secara signifikan mempercepat Git di Windows dengan menjalankan tiga perintah untuk menetapkan beberapa opsi konfigurasi:
Catatan:
core.preloadindex
melakukan operasi sistem file secara paralel untuk menyembunyikan latensi (pembaruan: diaktifkan secara default di Git 2.1)core.fscache
memperbaiki masalah UAC sehingga Anda tidak perlu menjalankan Git sebagai administrator (pembaruan: diaktifkan secara default di Git untuk Windows 2.8)gc.auto
meminimalkan jumlah file di .git /sumber
Apakah Anda memiliki informasi Git yang ditampilkan di Bash prompt Anda? Jika demikian, mungkin Anda secara tidak sengaja melakukan terlalu banyak pekerjaan pada setiap perintah. Untuk menguji teori ini, coba perubahan sementara berikut di Bash:
sumber
$(__git_ps1)
... menghapus ini membuat semuanya super cepatC:\Program Files (x86\Git\etc\profile
dan komentari if-then-else tempat__git_ps1
ditambahkanPS1
.Direktori home Windows saya ada di jaringan, dan saya curiga bahwa perintah Git Bash mencari lebih dulu. Benar saja, ketika saya melihat
$PATH
, itu terdaftar/h/bin
pertama, di mana/h
bagian di server file Windows, meskipun/h/bin
tidak ada.Saya mengedit
/etc/profile
dan mengomentari perintah ekspor yang menempatkannya sebagai yang pertama di$PATH
:Ini membuat perintah saya berjalan lebih cepat, mungkin karena Git Bash tidak lagi mencari di jaringan untuk dieksekusi. Saya
/etc/profile
adalahc:\Program Files (x86)\Git\etc\profile
.sumber
HOME="$(cd "$HOME" ; pwd)"
menjadiHOME="$(cd "$USERPROFILE" ; pwd)"
, dan sekarang semuanya sangat cepat. Terima kasih atas tipnya.Saya menemukan drive jaringan adalah masalah kinerja.
HOME
menunjuk ke pangsa jaringan yang lambat. Saya tidak bisa mengesampingkanHOMEDRIVE
tapi itu bukan masalah dari apa yang saya lihat.Atur variabel lingkungan dengan mengklik kanan komputer Anda di desktop -> properties -> Pengaturan sistem lanjutan -> Variabel Lingkungan Tambahkan ke bagian variabel Pengguna
sumber
Dalam ekstensi untuk jawaban Chris Dolan, saya menggunakan
PS1
pengaturan alternatif berikut . Cukup tambahkan fragmen kode ke profil ~ / .profile Anda (pada Windows 7: C: /Users/USERNAME/.profile).Ini mempertahankan manfaat dari cangkang berwarna dan tampilan nama cabang saat ini (jika dalam repositori Git), tetapi secara signifikan lebih cepat pada mesin saya, dari ~ 0,75 detik hingga 0,1 detik.
Ini didasarkan pada posting blog ini .
sumber
__git_ps1
mencakup informasi status, bukan hanya nama cabang. Misalnya, jika Anda berada dalam keadaan kepala yang terpisah, di git dir, dalam repo telanjang, di tengah-tengah memetik ceri atau rebasing atau penggabungan ... Ini akan lebih cepat, tetapi mungkin ada kesempatan di mana Anda akan kehilangan info tambahan ini, terutama sebagai pemula Git.Meskipun masalah Anda mungkin berbasis jaringan, saya secara pribadi mempercepat
git status
panggilan lokal saya sepuluh kali lipat (7+ detik hingga 700 ms) dengan melakukan dua modifikasi. Ini adalah repositori 700 MB dengan 21.000 file dan jumlah file biner besar yang berlebihan.Salah satunya adalah mengaktifkan preload indeks paralel. Dari prompt perintah:
git config core.preloadindex true
Ini berubah
time git status
dari 7 detik menjadi 2,5 detik.Saya juga menonaktifkan UAC dan driver "luafv" (reboot diperlukan). Ini menonaktifkan driver di Windows Vista, 7 dan 8 yang mengarahkan ulang program yang mencoba menulis ke lokasi sistem dan sebaliknya mengarahkan kembali akses tersebut ke direktori pengguna.
Untuk melihat diskusi tentang bagaimana ini mempengaruhi kinerja Git, baca di sini: https://code.google.com/p/msysgit/issues/detail?id=320
Untuk menonaktifkan driver ini, di regedit, ubah kunci "mulai" di
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/luafv
ke 4 untuk menonaktifkan driver. Kemudian, masukkan UAC ke pengaturan terendah, "jangan beri tahu".Jika menonaktifkan driver ini membuat Anda waspada (seharusnya), sebuah alternatif berjalan pada drive (atau partisi) berbeda dari partisi sistem Anda. Rupanya driver hanya berjalan pada akses file pada partisi sistem. Saya memiliki hard drive kedua dan melihat hasil yang identik ketika dijalankan dengan modifikasi registri ini pada drive C saya seperti yang saya lakukan tanpa itu pada drive D.
Perubahan ini
time git status
dari 2,5 detik menjadi 0,7 detik.Anda juga mungkin ingin mengikuti https://github.com/msysgit/git/pull/94 dan https://github.com/git/git/commit/d637d1b9a8fb765a8542e69bd2e04b3e229f663b untuk mengetahui apa pekerjaan tambahan yang sedang berlangsung untuk masalah kecepatan pada Windows. .
sumber
Tampaknya menghapus sepenuhnya Git, memulai ulang (penyembuhan Windows klasik), dan menginstal ulang Git adalah penyembuhannya. Saya juga menghapus semua file konfigurasi bash yang tersisa (dibuat secara manual). Semuanya cepat lagi.
Jika karena alasan tertentu menginstal ulang tidak mungkin (atau diinginkan), maka saya pasti akan mencoba mengubah variabel PS1 yang dirujuk dalam jawaban Chris Dolan ; itu menghasilkan peningkatan signifikan dalam operasi tertentu.
sumber
Saya memecahkan masalah Git lambat saya pada Windows 7 x64 dengan memulai cmd.exe dengan "Run as administrator".
sumber
Saya melihat peningkatan yang layak dengan menetapkan core.preloadindex menjadi true seperti yang direkomendasikan di sini .
sumber
Seperti dicatat dalam jawaban Chris Dolan dan Wilbert, PS1 memperlambat Anda .
Daripada sepenuhnya menonaktifkan (seperti yang disarankan oleh Dolan) atau menggunakan skrip yang ditawarkan oleh Wilbert, saya menggunakan "PS1 bodoh" yang jauh lebih cepat.
Ini menggunakan
(git symbolic-ref -q HEAD || git rev-parse --short HEAD) 2> /dev/null
:Di Cygwin saya, ini lebih cepat daripada jawaban "fast_Git_PS1" Wilbert - 200 ms vs 400 ms, jadi ini mengurangi sedikit kelesuan Anda.
Ini tidak secanggih
__git_ps1
- misalnya itu tidak mengubah prompt ketika Anda cd ke direktori .git, dll. Tetapi untuk penggunaan sehari-hari normal itu cukup baik dan cepat.Ini diuji pada Git 1.7.9 (Cygwin, tetapi harus bekerja pada platform apa pun).
sumber
--short
opsi untuk tidak mencetakrefs/heads/
--short
untuksymbolic-ref
perintah.Anda juga dapat memperoleh peningkatan kinerja yang sangat subsekuen dengan mengubah konfigurasi Git berikut:
Saat menjalankan
git status
perintah sederhana di Window 7 x64, komputer saya membutuhkan waktu lebih dari 30 detik untuk dijalankan. Setelah opsi ini ditentukan, perintahnya langsung.Mengaktifkan penelusuran Git sendiri seperti yang dijelaskan di halaman berikut membantu saya menemukan asal masalah, yang mungkin berbeda dalam instalasi Anda: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so- lambat
sumber
Saya mengalami masalah yang sama, baik di Git Bash dan Git GUI. Kedua program digunakan untuk berjalan dengan baik, tetapi kemudian secara acak melambat menjadi merangkak, dan saya tidak tahu mengapa.
Ternyata, itu adalah Avast. Avast telah menyebabkan hal-hal aneh terjadi pada berbagai program (termasuk program yang saya tulis), jadi saya menonaktifkannya sebentar, dan tentu saja, Bash sekarang berjalan secepat di Linux. Saya baru saja menambahkan folder file program Git (
C:\Program Files\Git
) ke daftar pengecualian Avast, dan sekarang berjalan secepat yang dilakukannya di Linux.Dan ya, saya menyadari perangkat lunak antivirus bukan masalah di posting asli, tapi saya hanya akan meletakkan ini di sini kalau-kalau itu berguna untuk seseorang.
sumber
Selain jawaban-jawaban lain ini, saya telah mempercepat proyek-proyek dengan banyak submodul dengan menggunakan pengambilan submodul paralel (sejak Git 2.8 pada awal 2016).
Ini dapat dilakukan dengan
git fetch --recurse-submodules -j8
dan diatur dengangit config --global submodule.fetchJobs 8
, atau betapapun inti yang Anda miliki / ingin gunakan.sumber
Jika Anda menggunakan Git dari cmd, coba jalankan dari Git Bash. Dalam cmd, git.exe sebenarnya adalah pembungkus yang mengatur lingkungan yang benar setiap kali Anda memulainya, dan baru kemudian meluncurkan git.exe yang sebenarnya. Ini bisa memakan waktu hingga dua kali lipat dari yang dibutuhkan untuk melakukan apa yang Anda inginkan. Dan Git Bash mengatur lingkungan hanya saat itu dimulai.
sumber
Hanya mematikan AMD Radeon Graphics (atau Intel Graphics) di Device Manager membantu saya.
Saya menemukan jawabannya di sini: /superuser/1160349/git-is-extremely-slow-on-windows# =
sumber
Jawaban gabungan:
(<branch_name>)
atau(<sha>)
Hasil:
sumber
core.commitGraph=true
dari blogs.msdn.microsoft.com/devops/2018/06/25/... dan lainnya dari blogs.msdn.microsoft.com/devops/tag/gitSaya mengalami masalah yang sama dengan menjalankan Git untuk Windows (msysgit) pada Windows 7 x64 sebagai akun pengguna terbatas selama beberapa waktu.
Dari apa yang saya baca di sini dan di tempat lain, tema umum tampaknya adalah kurangnya hak administratif dan / atau UAC. Karena UAC tidak aktif di sistem saya, penjelasan bahwa UAC sedang mencoba untuk menulis / menghapus sesuatu di direktori file program paling masuk akal bagi saya.
Bagaimanapun, saya telah menyelesaikan masalah saya dengan menginstal versi portabel Git 1.8 dengan zipinstaller. Perhatikan bahwa saya harus membongkar file distribusi .7z dan mengemasnya kembali sebagai file ZIP agar zipinstaller berfungsi. Saya juga harus secara manual menambahkan direktori itu ke jalur sistem saya.
Performanya baik-baik saja sekarang. Meskipun diinstal di
Program Files (x86)
direktori, yang saya tidak memiliki izin sebagai pengguna terbatas, sepertinya tidak mengalami masalah yang sama.Saya menganggap ini karena fakta bahwa versi portabel sedikit lebih konservatif di mana ia menulis / menghapus file, yang mungkin terjadi, atau untuk peningkatan dari 1,7 menjadi 1,8. Saya tidak akan mencoba untuk menentukan yang mana alasannya, cukup untuk mengatakan itu bekerja lebih baik sekarang, termasuk Bash.
sumber
Dalam kasus saya, sebenarnya itu adalah antivirus Avast yang mengarah ke Git Bash dan bahkan PowerShell menjadi sangat lambat.
Saya pertama kali mencoba menonaktifkan Avast selama 10 menit untuk melihat apakah itu meningkatkan kecepatan dan ternyata itu. Setelah itu, saya menambahkan seluruh direktori instalasi Git Bash sebagai pengecualian di Avast, untuk Read, Write dan Execute. Dalam kasus saya itu
C:\Program Files\Git\*
.sumber
Tidak ada yang di atas yang bisa membantu saya. Dalam skenario saya, masalahnya muncul seperti ini:
ll
perintah lambat (mengambil sekitar 3 detik untuk mengeksekusi)ll
Perintah selanjutnya dieksekusi secara instan, tetapi hanya jika dalam waktu 45 detik dari perintah ls sebelumnya .Ketika datang untuk debugging dengan Proses Monitor ditemukan bahwa sebelum setiap perintah ada permintaan DNS.
Jadi segera setelah saya menonaktifkan firewall saya (Comodo dalam kasus saya) dan biarkan perintah mengeksekusi masalah itu hilang. Dan itu tidak kembali ketika firewall dihidupkan kembali. Dengan kesempatan paling awal, saya akan memperbarui respons ini dengan perincian lebih lanjut tentang proses apa yang melakukan permintaan DNS pemblokiran dan apa targetnya.
BR, G
sumber
ll
menjadi alias untuklog
? Tampaknya aneh bahwa akan ada permintaan DNS untuk itu.ll
adalah alias untukls -l
. Dan tetap saja aneh untuk memicu permintaan DNS ... Sementara itu saya masih menunggu masalah ini muncul lagi untuk menambahkan rincian lebih lanjut ke dalam balasan.Dalam kasus saya, pintasan Git Bash diatur ke
Start in:%HOMEDRIVE%%HOMEPATH%
(Anda dapat memeriksanya dengan mengeklik kanan Git Bash dan memilih properti). Ini adalah drive jaringan.Solusinya adalah dengan membuatnya menunjukkan
%HOME%
. Jika Anda tidak memilikinya, Anda dapat mengaturnya di variabel lingkungan dan sekarang Git Bash harus cepat.sumber
Saya juga punya masalah dengan git PS1 lambat, meskipun untuk waktu yang lama saya berpikir itu masalah ukuran database (repositori besar) dan sedang mencoba berbagai
git gc
trik, dan sedang mencari alasan lain, sama seperti Anda. Namun, dalam kasus saya, masalahnya adalah baris ini:Melakukan
git status
untuk setiap baris status baris perintah lambat. Aduh. Itu adalah sesuatu yang saya tulis dengan tangan. Saya melihat itu adalah masalah ketika saya mencobaseperti disebutkan dalam satu jawaban di sini. Baris perintah sangat cepat.
Sekarang saya menggunakan ini:
Dari garis Stack Overflow pos PS1 dengan git saat ini cabang dan warna dan berfungsi dengan baik. Lagi-lagi punya baris perintah Git yang cepat.
sumber
Seorang rekan kerja saya bermasalah dengan Git di Windows (7)
git status
checkout
danadd
cepat, tetapigit commit
butuh waktu lama.Kami masih berusaha menemukan akar penyebabnya, tetapi kloning repositori ke folder baru memperbaiki masalahnya.
sumber
Seperti yang banyak dikatakan, ini adalah karena
stash
menjadi skrip shell di Windows, tetapi karena Git 2.18.0 installer Windows memiliki opsi untuk fitur eksperimental dari versi simpanan bawaan yang jauh lebih cepat (~ 90%) - https: / /github.com/git-for-windows/build-extra/pull/203 .sumber
stash
, tetapi milik Anda adalah posting pertama yang menyebutkanstash
secara khusus. Apakah ini memengaruhi operasi Git lainnya?stash
dan / ataurebase
menggunakan executable asli untuk kinerja yang lebih baik tetapi dengan apa pun dalam pratinjau selalu ada kemungkinan kecil bahwa mungkin ada efek samping yang kecil.