Git Bash sangat lambat pada Windows 7 x64

436

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 cdmembutuhkan waktu antara 8-25 detik, menjalankan gitperintah memakan waktu 5-20 detik, dan lskadang-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.

Gemini14
sumber
1
Bukan untuk mengecilkan hati Anda tetapi Cygwin sangat lambat pada x64, Anda lebih baik mencobanya pada Windows XP 32bit.
ismail
2
kemungkinan duplikat bash Msysgit sangat lambat di Windows 7
childno͡.de
5
Pada sistem yang sama, itu tidak lambat setengah tahun yang lalu. Mereka pasti mengubah sesuatu ...
Tomáš Zato - Reinstate Monica
2
Pada hampir semua mesin di sini: Kaspersky AV secara besar-besaran memperlambat git dan "menonaktifkan" Kaspersky rusak, avp.exe masih berjalan setelah keluar sepenuhnya. Instal ulang lengkap kaspersky biasanya memperbaiki masalah yang terakhir.
peterchen
2
Lihat halaman wiki msysgit tentang ini: github.com/msysgit/msysgit/wiki/Diagnosa-why-Git-is-so-slow
Drew Noakes

Jawaban:

409

Anda dapat secara signifikan mempercepat Git di Windows dengan menjalankan tiga perintah untuk menetapkan beberapa opsi konfigurasi:

git config --global core.preloadindex true
git config --global core.fscache true
git config --global gc.auto 256

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 /

pembuat sepatu
sumber
Tidak membantu saya, tetapi membantu ekspor PS1 = '$' yang disebutkan di bawah. Jadi saya tahu bagi saya masalahnya adalah jalur terminal.
Koshmaar
67
Pengaturan yang sama sekali tidak berguna di 2017 (git 2.12) karena semua hal ini diaktifkan secara default. Tapi git masih bekerja lambat seperti sampah.
ieXcept
2
Berfungsi bagus di Windows 10 juga. Bagus sekali & terima kasih atas @shoelzer ini!
Joe
1
Membatasi file hingga 256 dapat menyebabkan beberapa masalah. Dan dua opsi pertama sudah diaktifkan di git versi baru.
nPcomp
@sonyvizio Masalah apa?
pembuat sepatu
102

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:

export PS1='$'
Chris Dolan
sumber
11
Masalahnya adalah dengan $(__git_ps1)... menghapus ini membuat semuanya super cepat
Hendy Irawan
10
Untuk yang belum tahu di antara kita, apa sebenarnya yang dilakukan perintah ini? Anda mengatakan itu "sementara", bagaimana cara mengembalikan perintah?
Immortal Blue
5
Juga memperbaiki masalah kinerja saya. Untuk memperbaiki secara permanen, edit C:\Program Files (x86\Git\etc\profiledan komentari if-then-else tempat __git_ps1ditambahkan PS1.
Tom
6
Dalam versi 2.18.0 saat ini saya tidak dapat menemukan perintah __git_ps1 di / etc / profile. Apakah sudah pindah ke tempat lain?
keinabel
8
Tampaknya telah pindah ke C: \ Program Files \ Git \ etc \ profile.d \ git-prompt.sh. Saya berkomentar __git_ps1 dalam file itu dan itu berjalan lebih cepat (tapi kehilangan info cabang di prompt)
Miyagi
85

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/binpertama, di mana /hbagian di server file Windows, meskipun /h/bintidak ada.
Saya mengedit /etc/profiledan mengomentari perintah ekspor yang menempatkannya sebagai yang pertama di $PATH:

#export PATH="$HOME/bin:$PATH"

Ini membuat perintah saya berjalan lebih cepat, mungkin karena Git Bash tidak lagi mencari di jaringan untuk dieksekusi. Saya /etc/profileadalah c:\Program Files (x86)\Git\etc\profile.

Rob Johnson
sumber
6
Saya memiliki masalah yang sama. Saya berubah HOME="$(cd "$HOME" ; pwd)"menjadi HOME="$(cd "$USERPROFILE" ; pwd)", dan sekarang semuanya sangat cepat. Terima kasih atas tipnya.
Jon Sagara
2
Saya berhasil menggunakan variasi ini: di profil, memaksa $ HOME ke $ USERPROFILE, menghapus referensi $ HOMEDRIVE. Juga pada properti pintasan Git Bash, setel "Mulai Masuk" ke% USERPROFILE%
Aidan Ryan
11
Ini memperbaiki masalah saya sebagian besar, tetapi dengan Git setidaknya pada 2.7.2 saya menemukan bahwa ekspor di /etc/profile.d/env.sh bukannya langsung di file / etc / profile.
Jared Siirila
15
Terima kasih banyak, masalah yang sama bagi saya, namun saya memperbaikinya dengan membuat variabel lingkungan (pengguna) yang disebut HOME, menunjuk ke direktori home yang saya inginkan. Jika $ HOME tidak ada, rupanya git bash akan default ke% USERPROFILE%. Setelah ini, git bash cepat kilat.
JHH
6
Satu-satunya opsi yang berfungsi adalah @JHH yang dijelaskan dalam komentar. Tambahkan variabel lingkungan pengguna Windows yang disebut HOME dan tentukan direktori home yang Anda inginkan. (Control Panel -> System -> Pengaturan sistem lanjutan -> Variabel Lingkungan)
RenRen
45

Saya menemukan drive jaringan adalah masalah kinerja. HOMEmenunjuk ke pangsa jaringan yang lambat. Saya tidak bisa mengesampingkan HOMEDRIVEtapi 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

HOME=%USERPROFILE%
MichaelK
sumber
4
Ini berhasil. Untuk semua orang yang memiliki masalah jaringan, ini adalah solusi nyata. Anda tidak perlu mengedit file konfigurasi, cukup buat HOME titik di mana seharusnya.
Carlos Calla
1
Menentukan Env User Var HOME sebagai% USERPROFILE% tidak berfungsi. Saya mendefinisikan SYSTEM VAR: HOME = C: \ Users \ myUserName
colin_froggatt
Bekerja untukku! Terima kasih. Saya melakukan sesuatu seperti @colin_froggatt tetapi dalam variabel Lingkungan Pengguna, menetapkan HOME = C: \ Users \ myUserName
Ð ..
22

Dalam ekstensi untuk jawaban Chris Dolan, saya menggunakan PS1pengaturan alternatif berikut . Cukup tambahkan fragmen kode ke profil ~ / .profile Anda (pada Windows 7: C: /Users/USERNAME/.profile).

fast_git_ps1 ()
{
    printf -- "$(git branch 2>/dev/null | sed -ne '/^\* / s/^\* \(.*\)/ [\1] / p')"
}

PS1='\[\033]0;$MSYSTEM:\w\007
\033[32m\]\u@\h \[\033[33m\w$(fast_git_ps1)\033[0m\]
$ '

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 .

Wilbert
sumber
Jawaban yang bagus Namun saya telah memutuskan untuk mendefinisikan kembali '__git_ps1 ()' di my ~ / .bashrc, dan cukup cetak string kosong. Ini mempercepat semua perintah Bash.
ajukraine
Saya seorang pemula git, saya ingin tahu apa perbedaan antara fast_git_ps1 ini dan yang asli __git_ps1 cukup rumit. Saya mendapat ide bahwa ini akan bekerja untuk sebagian besar kasus "normal", tetapi apa yang normal dan di mana ini akan gagal?
sundar - Reinstate Monica
Saya tidak mengetahui kasus di mana ia akan gagal. Saya memang menggunakan __git_ps1 sebelumnya, tetapi memperhatikan masalah kinerja, jadi saya bermain-main mencoba membuat git bekerja lebih sedikit untuk mengekstrak informasi yang ditampilkan.
Wilbert
2
Dokumen asli __git_ps1mencakup 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.
Drew Noakes
22

Meskipun masalah Anda mungkin berbasis jaringan, saya secara pribadi mempercepat git statuspanggilan 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 statusdari 7 detik menjadi 2,5 detik.

Memperbarui!

Berikut ini tidak perlu lagi. Sebuah tambalan telah memperbaikinya pada mysysgit 1.9.4
https://github.com/msysgit/git/commit/64d63240762df22e92b287b145d75a0d68a66988
Namun, Anda harus mengaktifkan perbaikan dengan mengetik
git config core.fscache true

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/luafvke 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 statusdari 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. .

Jeff Lamb
sumber
10
ini hanya menyoroti, sekali lagi, idiot dan solusi Microsoft yang berliku-liku, untuk masalah yang diselesaikan di Unix dengan cara yang sederhana dan elegan pada tahun 1968. Berapa banyak upaya produksi, waktu, dan uang yang dihabiskan oleh mengasapi Microsoft dan kurangnya refactoring / flexiblity / keberanian di seluruh dunia?
v.oddou
20
Saya ingat menggunakan git di 68, itu sangat bagus.
Charlie Brown
2
Haha setahun sebelum Linus datang ke @CharlieBrown
cchamberlain
1
diaktifkan secara default di git 2.1 stackoverflow.com/a/24045966/4854931
Alex78191
18

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.

Gemini14
sumber
3
Menginstal ulang tanpa restart tidak berhasil, uninstall-restart-install berfungsi. Terima kasih! Akan menyenangkan mengetahui mengapa dan bagaimana bash menjadi sangat lambat.
Gauthier
Menginstal ulang dengan reboot di-antara tidak membuat perbedaan bagi saya.
RyanW
@RyanW Saya khawatir saya tidak dapat membantu di luar solusi di atas yang bekerja untuk saya, tetapi karena masalah ini tampaknya belum diperbaiki secara permanen, Anda mungkin ingin menghubungi pengelola msysgit dan melihat apakah mereka dapat mengetahui penyebab masalah ini.
Gemini14
3
File konfigurasi bash mana yang tepatnya Anda hapus?
Scott
3
Ini bukan solusi untuk jawabannya. Ketika Anda menghapus dan menginstal ulang beberapa file konfigurasi mungkin telah berubah, perubahan itu adalah jawabannya. Jika Anda hanya mengatakan bahwa menginstal ulang adalah solusinya, itu salah. Orang lain mungkin menghapus dan menginstal ulang dan mengkonfigurasi file mungkin sama dan itu sebabnya itu tidak akan berhasil untuk semua orang.
Carlos Calla
10

Saya memecahkan masalah Git lambat saya pada Windows 7 x64 dengan memulai cmd.exe dengan "Run as administrator".

Chris Pawlukowsky
sumber
10
Pertanyaannya berbicara tentang git bash.
manojlds
2
Anda dapat menjalankan git bash sebagai administrator; yang mungkin menunjukkan masalah UAC
krosenvold
3
Wow, peningkatan kecepatan luar biasa menjalankan git bash sebagai administrator
Evil E
Saya tidak yakin mengapa jawaban ini hanya memiliki 6 suara. Saya pikir jawaban ini menyelesaikan masalah sepenuhnya. Ada peningkatan kecepatan yang sangat besar.
vinoth10
2
@ vinoth10 Nah, ada masalah dengan, Anda tahu, berjalan sebagai administrator. Yang karena banyak alasan adalah ide yang buruk, dan untuk banyak kasus penggunaan perusahaan bukanlah pilihan sama sekali. Memecahkan masalah kinerja dengan meninggikan pengguna adalah solusi yang mengerikan.
JHH
6

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:

PS1='\033[33m\]\w \n\[\033[32m\]$((git symbolic-ref -q HEAD || git rev-parse -q --short HEAD) 2> /dev/null) \[\033[00m\]# '

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).

sinelaw
sumber
Anda juga dapat menggunakan --shortopsi untuk tidak mencetakrefs/heads/
friederbluemle
@friederbluemle, git versi apa yang Anda gunakan? Milik saya (1.7.9) tidak menawarkan --shortuntuk symbolic-refperintah.
sinelaw
Diperbarui untuk tidak mencetak kesalahan saat berada di luar git repo, dan bekerja untuk HEADs yang terpisah
sinelaw
Saya menggunakan 1.8.4 (msysgit)
friederbluemle
6

Anda juga dapat memperoleh peningkatan kinerja yang sangat subsekuen dengan mengubah konfigurasi Git berikut:

git config --global status.submoduleSummary false

Saat menjalankan git statusperintah 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

Olivier
sumber
5

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.

Nkosi Dean
sumber
4

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 -j8dan diatur dengan git config --global submodule.fetchJobs 8, atau betapapun inti yang Anda miliki / ingin gunakan.

codehearts
sumber
2

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.

Eugene Pakhomov
sumber
2

Jawaban gabungan:

  1. Wilbert's - info apa yang akan disertakan dalam PS1
  2. sinelaw - (<branch_name>)atau(<sha>)
# /unix/140610/using-variables-to-store-terminal-color-codes-for-ps1/140618#140618
# /unix/124407/what-color-codes-can-i-use-in-my-ps1-prompt
# \033 is the same as \e
# 0;32 is the same as 32
CYAN="$(echo -e "\e[1;36m")"
GREEN="$(echo -e "\e[32m")"
YELLOW="$(echo -e "\e[33m")"
RESET="$(echo -e "\e[0m")"

# /programming/4485059/git-bash-is-extremely-slow-in-windows-7-x64/19500237#19500237
# /programming/4485059/git-bash-is-extremely-slow-in-windows-7-x64/13476961#13476961
# /programming/39518124/check-if-directory-is-git-repository-without-having-to-cd-into-it/39518382#39518382
fast_git_ps1 ()
{
    git -C . rev-parse 2>/dev/null && echo " ($((git symbolic-ref --short -q HEAD || git rev-parse -q --short HEAD) 2> /dev/null))"
}

# you need \] at the end for colors
# Don't set \[ at the beginning or ctrl+up for history will work strangely
PS1='${GREEN}\u@\h ${YELLOW}\w${CYAN}$(fast_git_ps1)${RESET}\] $ '

Hasil:

frolowr @ RWAMW36650 / c / proyek / elm-math-kids (master) $

rofrol
sumber
tidak membuatnya lebih cepat
keinabel
@keinabel Pada saat ini saya akan melihat core.commitGraph=truedari blogs.msdn.microsoft.com/devops/2018/06/25/... dan lainnya dari blogs.msdn.microsoft.com/devops/tag/git
rofrol
2

Saya 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.

Biner Phile
sumber
1
Mematikan UAC tampaknya memecahkan masalah "besar" bagi kami (penundaan multi-detik). Retas ps1 melakukan sisanya.
krosenvold
Sama dengan saya di SSD, 32GB RAM dan quad core i7 dan tidak ada jawaban lain yang membantu, menonaktifkan UAC, restart dan perintah git adalah INSTAN
phil_lgr
2

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\*.

Mastergalen
sumber
Saya ingin mengkonfirmasi tips ini. Mengecualikan git dari Avast benar-benar membuat segalanya lebih cepat. Saya melihat status git tanpa menunggu lagi. Menangkan 7 x64
fajarhac
Antivirus hanya mengganggu.
Alex78191
1
Terima kasih, itu pasti kemenangan cepat! Dinonaktifkan avast selama 10 menit, melihat perubahan instan dalam kinerja git (yaitu kembali ke waktu eksekusi normal).
Marcello Romani
Solusi ini berhasil untuk saya. McAfee + Ent Windows 10.
FractalSpace
1

Tidak ada yang di atas yang bisa membantu saya. Dalam skenario saya, masalahnya muncul seperti ini:

  • Setiap llperintah lambat (mengambil sekitar 3 detik untuk mengeksekusi)
  • llPerintah 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

George
sumber
llmenjadi alias untuk log? Tampaknya aneh bahwa akan ada permintaan DNS untuk itu.
Michael - Di mana Clay Shirky
1
lladalah alias untuk ls -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.
George
1

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.

mahacoder
sumber
Saya pikir jawaban ini harus memiliki lebih banyak suara. Saya datang ke sini untuk memposting rekomendasi yang sama, tetapi melihat Anda sudah mengalahkan saya untuk itu lol.
Jon
0

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 gctrik, dan sedang mencari alasan lain, sama seperti Anda. Namun, dalam kasus saya, masalahnya adalah baris ini:

function ps1_gitify
{
   status=$(git status 2>/dev/null )      # <--------------------
   if [[ $status =~ "fatal: Not a git repository" ]]
   then
       echo ""
   else
       echo "$(ps1_git_branch_name)  $(ps1_git_get_sha)"
  fi
}

Melakukan git statusuntuk setiap baris status baris perintah lambat. Aduh. Itu adalah sesuatu yang saya tulis dengan tangan. Saya melihat itu adalah masalah ketika saya mencoba

export PS1='$'

seperti disebutkan dalam satu jawaban di sini. Baris perintah sangat cepat.

Sekarang saya menggunakan ini:

function we_are_in_git_work_tree
{
    git rev-parse --is-inside-work-tree &> /dev/null
}

function ps1_gitify
{
    if ! we_are_in_git_work_tree
    then
    ...

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.

Koshmaar
sumber
Jadi masalah Anda disebabkan oleh skrip yang Anda tulis? Mungkin skrip itu tidak mungkin menjadi penyebabnya, bagi pengguna lain yang mencari masalah yang sama ...
Jolta
Lihatlah pertanyaan OP - dia menyebutkan banyak hal yang telah dia periksa, dan tetap saja bukan. Hal yang sama terjadi pada saya. Jadi di sini saya menambahkan hal lain untuk diperiksa ketika tidak ada yang membantu. Dan bukan skrip khusus ini yang saya tulis yang penting, tetapi sebuah konsep - lihat PS1 Anda.
Koshmaar
0

Seorang rekan kerja saya bermasalah dengan Git di Windows (7) git status checkoutdan addcepat, tetapi git commitbutuh waktu lama.

Kami masih berusaha menemukan akar penyebabnya, tetapi kloning repositori ke folder baru memperbaiki masalahnya.

mrcl
sumber
0

Seperti yang banyak dikatakan, ini adalah karena stashmenjadi 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 .

bergmeister
sumber
Itu membantu stash, tetapi milik Anda adalah posting pertama yang menyebutkan stashsecara khusus. Apakah ini memengaruhi operasi Git lainnya?
Michael - Di mana Clay Shirky
Sejauh yang saya mengerti, tidak. Ada 2 fitur eksperimental dalam pratinjau yang memungkinkan untuk memiliki stashdan / atau rebasemenggunakan executable asli untuk kinerja yang lebih baik tetapi dengan apa pun dalam pratinjau selalu ada kemungkinan kecil bahwa mungkin ada efek samping yang kecil.
bergmeister
1
PS Fitur ini keluar dari pratinjau dalam v 2.19.1, oleh karena itu Anda tidak mendapatkan opsi untuk itu lagi
bergmeister