Git Bash ช้ามากใน Windows 7 x64


435

ฉันใช้ Git ทั้ง Windows และ Ubuntu ในระหว่างการพัฒนาโครงการขนาดเล็กพลิกกลับไปกลับมาระหว่างสองโครงการบ่อยครั้ง ปัญหาคือGit Bashช้าลงเรื่อย ๆ

เมื่อฉันพูดช้าฉันหมายความว่าการวิ่งcdจะใช้เวลาจาก 8-25 วินาทีการรันgitคำสั่งนั้นใช้เวลา 5-20 วินาทีและlsบางครั้งอาจใช้เวลาสูงสุด 30 วินาที ไม่จำเป็นต้องพูดแบบนี้ไม่สนุกไม่ต้องพูดถึงไม่ก่อผล ฉันรู้ว่า Git ช้าลงใน Windows แต่นี่มันไร้สาระ

วิธีแก้ปัญหาเดียวที่ใช้งานได้ชั่วคราวสำหรับฉันคือปิดการเชื่อมต่อเครือข่ายของฉัน (ตามที่แนะนำในคำตอบนี้ ) เริ่ม Git Bash แล้วเชื่อมต่อใหม่ บางครั้งมันยังคงทำงานได้อย่างรวดเร็วเป็นเวลาหลายวันหลังจากทำเช่นนั้น แต่ประสิทธิภาพจะลดลงในที่สุด ฉันสืบค้นผ่านกลุ่มสนทนา msysgit, Stack Overflow, รายการปัญหา msysgit และอื่น ๆ เป็นเวลานานหลายสัปดาห์ แต่ฉันไม่สามารถเปิดโซลูชันที่ใช้งานได้

จนถึงตอนนี้ฉันได้ลองแล้ว:

  • การเพิ่มโฟลเดอร์ Git & โครงการในรายการยกเว้นของโปรแกรมสแกนไวรัส
  • ปิดการใช้งานโปรแกรมสแกนไวรัสของฉันอย่างสมบูรณ์ (Kaspersky IS 2011)
  • ตรวจสอบให้แน่ใจว่า Outlook ไม่ทำงาน (Outlook 2007)
  • ปิดแอปพลิเคชันอื่น ๆ ทั้งหมด
  • ใช้ Git Bash ในฐานะผู้ดูแลระบบ
  • ปิดใช้งานการเชื่อมต่อเครือข่ายเริ่มต้น Git Bash และปิดใช้งานการเชื่อมต่อ
  • ปิดใช้งานการเชื่อมต่อเครือข่ายเริ่มต้น Git Bash เปิดใช้งานการเชื่อมต่อใหม่ (ใช้งานได้เป็นครั้งคราวเท่านั้น)
  • วิ่ง git gc
  • และการรวมกันของด้านบน

ฉันได้อ่านว่ามีคนสองคนประสบความสำเร็จในการปิดการใช้งาน Bash complete แต่โดยหลักแล้วฉันต้องการให้มันทำงานต่อไป รุ่นของ msysgit คือ 1.7.3.1-preview20101002 และระบบปฏิบัติการคือ Windows 7 x64 การเรียกใช้สิ่งเดียวกันบน Linux คือสามารถคาดเดาได้รวดเร็ว ฉันจะใช้ลีนุกซ์เป็นพิเศษ แต่ฉันจำเป็นต้องเรียกใช้เนื้อหาใน Windows เช่นกัน (บางแอปพลิเคชันการทดสอบ ฯลฯ )

มีใครพบปัญหาที่คล้ายกัน? ถ้าเป็นเช่นนั้นปัญหาพื้นฐานและอะไรคือทางออก (ถ้ามี)

สิ่งนี้ขยายได้มากกว่าแค่ที่เก็บ Git แต่สำหรับการอ้างอิงที่เก็บที่ฉันใช้ Git ด้วยนั้นค่อนข้างเล็ก: ~ 4-50 ไฟล์สูงสุด


1
เพื่อไม่เป็นการขัดขวางคุณ แต่ Cygwin นั้นทำงานช้ามากใน x64 คุณควรลองใช้กับ Windows XP 32 บิต
ismail

2
การทำสำเนาที่เป็นไปได้ของMsysgit bash นั้นช้ามากใน Windows 7
childno͡.de

5
ในระบบเดียวกันมันไม่ได้ช้าเมื่อครึ่งปีที่แล้ว พวกเขาจะต้องเปลี่ยนบางอย่าง ...
Tomáš Zato - Reinstate Monica

2
แทบทุกเครื่องที่นี่: Kaspersky AV ทำให้คอมไพล์ช้าลงอย่างมากและ "ปิดการใช้งาน" Kaspersky เสีย avp.exe ยังคงทำงานหลังจากออกมาอย่างสมบูรณ์ การติดตั้ง kaspersky ใหม่เสร็จสมบูรณ์มักจะแก้ไขปัญหาหลังได้
peterchen

2
ดูหน้าวิกิของ msysgit ในเรื่องนี้: github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow
Drew Noakes

คำตอบ:


409

คุณสามารถเร่งความเร็ว Git บน Windows ได้อย่างมีนัยสำคัญโดยเรียกใช้สามคำสั่งเพื่อตั้งค่าตัวเลือกการกำหนดค่าบางอย่าง:

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

หมายเหตุ:

  • core.preloadindex การดำเนินการของระบบไฟล์พร้อมกันเพื่อซ่อนเวลาแฝง (อัพเดท: เปิดใช้งานโดยค่าเริ่มต้นใน Git 2.1)

  • core.fscache แก้ไขปัญหา UAC ดังนั้นคุณไม่จำเป็นต้องเรียกใช้ Git ในฐานะผู้ดูแลระบบ (อัปเดต: เปิดใช้งานโดยค่าเริ่มต้นใน Git สำหรับ Windows 2.8)

  • gc.auto ลดจำนวนไฟล์ใน. git /


ไม่ช่วยฉัน แต่ช่วยส่งออก PS1 = '$' ที่กล่าวถึงด้านล่าง ดังนั้นฉันรู้สำหรับฉันปัญหาคือขั้วสาย
Koshmaar

67
การตั้งค่าที่ไร้ประโยชน์อย่างสมบูรณ์ในปี 2560 (git 2.12) เพราะทุกสิ่งนี้เปิดใช้งานโดยค่าเริ่มต้น แต่คอมไพล์ยังทำงานช้าเหมือนอึ
ieXcept

2
ใช้งานได้ดีบน Windows 10 ด้วย ทำได้ดีมากและขอขอบคุณ @shoelzer นี้!
โจ

1
การ จำกัด ไฟล์ไว้ที่ 256 อาจทำให้เกิดปัญหา และสองตัวเลือกแรกได้เปิดใช้งานกับ git เวอร์ชันใหม่แล้ว
nPcomp

@sonyvizio ปัญหาแบบไหนกันนะ?
shoelzer

102

คุณมีข้อมูล Git ที่แสดงใน Bash prompt ของคุณหรือไม่? ถ้าเป็นเช่นนั้นบางทีคุณอาจตั้งใจทำงานในทุกคำสั่งมากเกินไป เพื่อทดสอบทฤษฎีนี้ลองใช้การเปลี่ยนแปลงชั่วคราวต่อไปนี้ใน Bash:

export PS1='$'

11
มีปัญหากับ$(__git_ps1)... การลบสิ่งนี้ทำให้ทุกอย่างรวดเร็ว
Hendy Irawan

10
สำหรับผู้ที่ไม่ได้ฝึกหัดในหมู่พวกเราคำสั่งนี้จะทำอะไรกันแน่? คุณบอกว่าเป็น "ชั่วคราว" เราจะเปลี่ยนคำสั่งได้อย่างไร
Immortal Blue

5
แก้ไขปัญหาประสิทธิภาพการทำงานของฉันด้วย หากต้องการแก้ไขอย่างถาวรให้แก้ไขC:\Program Files (x86\Git\etc\profileและคอมเม้นต์ if-then-else ซึ่ง__git_ps1ถูกเพิ่มPS1ไว้
Tom

6
ในเวอร์ชันปัจจุบัน 2.18.0 ฉันสามารถหาคำสั่ง __git_ps1 ใน / etc / profile มันย้ายไปที่อื่นหรือไม่?
keinabel

8
ดูเหมือนว่าจะย้ายไปที่ C: \ Program Files \ Git \ etc \ profile.d \ git-prompt.sh ฉันแสดงความคิดเห็น __git_ps1 ในไฟล์นั้นและมันก็เร็วขึ้นมาก (แต่ข้อมูลสาขาหายไปในทันที)
มิยากิ

85

โฮมไดเรกทอรี Windows ของฉันอยู่ในเครือข่ายและฉันสงสัยว่าคำสั่ง Git Bash ดูที่นั่นก่อน แน่นอนว่าเมื่อฉันดู$PATHแล้วมันจะปรากฏ/h/binเป็นรายการแรกซึ่ง/hมีการแชร์บนเซิร์ฟเวอร์ไฟล์ Windows แม้ว่า/h/binจะไม่มีอยู่ก็ตาม
ฉันแก้ไข/etc/profileและแสดงความคิดเห็นคำสั่งการส่งออกที่ทำให้มันเป็นครั้งแรกใน$PATH:

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

นี่ทำให้คำสั่งของฉันทำงานเร็วขึ้นมากอาจเป็นเพราะ Git Bash ไม่ได้มองข้ามเครือข่ายสำหรับโปรแกรมปฏิบัติการอีกต่อไป ฉันเป็น/etc/profilec:\Program Files (x86)\Git\etc\profile


6
ฉันมีปัญหาเดียวกัน ฉันเปลี่ยนHOME="$(cd "$HOME" ; pwd)"เป็นHOME="$(cd "$USERPROFILE" ; pwd)"และตอนนี้ทุกอย่างรวดเร็วอย่างเห็นได้ชัด ขอบคุณสำหรับทิป.
Jon Sagara

2
ฉันประสบความสำเร็จในการใช้รูปแบบนี้ในโปรไฟล์บีบ $ HOME เป็น $ USERPROFILE ลบการอ้างอิง $ HOMEDRIVE เช่นเดียวกันกับคุณสมบัติของช็อตคัท Git Bash ตั้งค่า "เริ่มต้นใน" เป็น% USERPROFILE%
Aidan Ryan

11
สิ่งนี้แก้ไขปัญหาของฉันได้เป็นส่วนใหญ่ แต่ด้วย Git อย่างน้อยที่สุด 2.7.2 ฉันพบว่าการส่งออกใน /etc/profile.d/env.sh แทนที่จะส่งโดยตรงในไฟล์ / etc / profile
Jared Siirila

15
ขอบคุณมากปัญหาเดียวกันสำหรับฉัน แต่ฉันแก้ไขด้วยการสร้างตัวแปรสภาพแวดล้อม (ผู้ใช้) ชื่อ HOME ชี้ไปที่ไดเรกทอรีบ้านที่ฉันต้องการ หากไม่มี $ HOME แสดงว่า git bash นั้นจะเป็นค่าเริ่มต้นเป็น% USERPROFILE% หลังจากนี้การทุบตีคอมไพล์ก็เร็วมาก
JHH

6
ตัวเลือกเดียวที่ใช้งานได้คือ @JHH หนึ่งตัวที่อธิบายไว้ในความคิดเห็น เพิ่มตัวแปรสภาวะแวดล้อมผู้ใช้ Windows ชื่อ HOME และกำหนดโฮมไดเร็กทอรีที่คุณต้องการ (แผงควบคุม -> ระบบ -> การตั้งค่าระบบขั้นสูง -> ตัวแปรสภาพแวดล้อม)
RenRen

45

ฉันพบว่าไดรฟ์เครือข่ายเป็นปัญหาด้านประสิทธิภาพ HOMEกำลังชี้ไปที่การแชร์เครือข่ายที่ช้า ฉันไม่สามารถลบล้างได้HOMEDRIVEแต่นั่นไม่ใช่ปัญหาจากสิ่งที่ฉันเห็น

ตั้งค่าตัวแปรสภาพแวดล้อมโดยคลิกขวาที่คอมพิวเตอร์ของคุณบนเดสก์ท็อป -> คุณสมบัติ -> การตั้งค่าระบบขั้นสูง -> ตัวแปรสภาพแวดล้อมเพิ่มลงในตัวแปรผู้ใช้

HOME=%USERPROFILE%

4
สิ่งนี้ใช้ได้ผล สำหรับทุกคนที่มีปัญหาเครือข่ายนี่คือทางออกที่แท้จริง คุณไม่จำเป็นต้องแก้ไขไฟล์ปรับแต่งใด ๆ เพียงแค่ทำให้ HOME เป็นจุดที่ควรจะเป็น
Carlos Calla

1
การกำหนด Env User Var HOME เป็น% USERPROFILE% ไม่ทำงาน ฉันกำหนด SYSTEM VAR: HOME = C: \ Users \ myUserName
colin_froggatt

ทำงานให้ฉัน! ขอบคุณ ฉันทำสิ่งที่ชอบ @colin_froggatt แต่ในตัวแปรสภาพแวดล้อมของผู้ใช้แทนการตั้งค่า HOME = C: \ Users \ myUserName
Ð ..

22

ในส่วนขยายของคำตอบของ Chris Dolan ฉันใช้การPS1ตั้งค่าทางเลือกต่อไปนี้ เพียงเพิ่มส่วนของรหัสลงใน ~ / .profile ของคุณ (ใน 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\]
$ '

สิ่งนี้ยังคงประโยชน์ของเปลือกหอยสีและการแสดงชื่อสาขาปัจจุบัน (ถ้าอยู่ในที่เก็บ Git) แต่มันเร็วขึ้นอย่างมากในเครื่องของฉันจาก ~ 0.75 วินาทีถึง 0.1 วินาที

สิ่งนี้อิงจากโพสต์บล็อกนี้


คำตอบที่ดี อย่างไรก็ตามฉันได้ตัดสินใจกำหนด '__git_ps1 ()' ใหม่ใน ~ / .bashrc ของฉันแล้วพิมพ์สตริงว่าง มันเพิ่มความเร็วคำสั่ง Bash ทั้งหมด
ajukraine

ฉันเป็นผู้เริ่มต้นคอมไพล์ฉันต้องการทราบว่าความแตกต่างระหว่าง fast_git_ps1 นี้กับ __git_ps1 ที่ซับซ้อนเดิมคืออะไร ฉันได้รับแนวคิดว่าสิ่งนี้จะใช้ได้กับกรณี "ปกติ" ส่วนใหญ่ แต่มีอะไรปกติและสิ่งนี้จะล้มเหลวที่ไหน
sundar - Reinstate Monica

ฉันไม่ทราบถึงกรณีที่จะล้มเหลว ฉันใช้ __git_ps1 ก่อนหน้านี้ แต่สังเกตเห็นปัญหาด้านประสิทธิภาพดังนั้นฉันพยายามแก้ไขให้ git ทำงานน้อยลงเพื่อดึงข้อมูลที่แสดง
Wilbert

2
ต้นฉบับ__git_ps1มีข้อมูลสถานะไม่ใช่แค่ชื่อสาขา ตัวอย่างเช่นหากคุณอยู่ในสถานะผู้นำเดี่ยวใน git dir ใน repo เปลือยกลางเชอร์รี่เก็บหรือลดราคาหรือรวม ... นี้จะเร็วขึ้น แต่อาจมีบางโอกาสที่คุณจะพลาด ข้อมูลพิเศษนี้โดยเฉพาะอย่างยิ่งในฐานะผู้เริ่มต้น Git
Drew Noakes

22

ในขณะที่ปัญหาของคุณอาจขึ้นอยู่กับเครือข่ายฉันได้เร่งความเร็วการgit statusโทรภายในเครื่องของฉันเป็นสิบเท่า (7+ วินาทีถึง 700 มิลลิวินาที) โดยทำการแก้ไขสองครั้ง นี่เป็นที่เก็บ 700 MB ที่มีไฟล์ 21,000 ไฟล์และไฟล์ไบนารีขนาดใหญ่จำนวนมากเกินไป

หนึ่งคือการเปิดใช้งานโหลดล่วงหน้าดัชนีล่วงหน้า จากพรอมต์คำสั่ง:

git config core.preloadindex true
สิ่งนี้เปลี่ยนtime git statusจาก 7 วินาทีเป็น 2.5 วินาที

Update!

ต่อไปนี้ไม่จำเป็นอีกต่อไป โปรแกรมแก้ไขได้แก้ไขสิ่งนี้ในฐานะของ mysysgit 1.9.4
https://github.com/msysgit/git/commit/64d63240762df22e92b287b145d75a0d68a66988
อย่างไรก็ตามคุณต้องเปิดใช้งานการแก้ไขโดยการพิมพ์
git config core.fscache true

ฉันยังปิดการใช้งาน UAC และไดรเวอร์ "luafv" (ต้องบูตเครื่องใหม่) สิ่งนี้จะปิดการใช้งานไดรเวอร์ใน Windows Vista, 7 และ 8 ซึ่งเปลี่ยนเส้นทางโปรแกรมที่พยายามเขียนไปยังตำแหน่งของระบบและเปลี่ยนเส้นทางการเข้าถึงไดเรคทอรีไปยังไดเรกทอรีผู้ใช้แทน

หากต้องการดูการอภิปรายว่าสิ่งนี้มีผลต่อประสิทธิภาพของ Git อย่างไรอ่านได้ที่นี่: https://code.google.com/p/msysgit/issues/detail?id=320

หากต้องการปิดการใช้งานไดรเวอร์นี้ใน regedit เปลี่ยนปุ่ม "เริ่มต้น" ที่HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/luafv4 เพื่อปิดการใช้งานไดรเวอร์ จากนั้นย้าย UAC ไปที่การตั้งค่าต่ำสุด "ไม่ต้องแจ้ง"

หากการปิดการใช้งานไดร์เวอร์นี้ทำให้คุณระวัง (ควร), ทางเลือกอื่นกำลังทำงานบนไดรฟ์ (หรือพาร์ติชัน) ที่แตกต่างจากพาร์ติชันระบบของคุณ เห็นได้ชัดว่าคนขับทำงานในการเข้าถึงไฟล์บนพาร์ติชันระบบเท่านั้น ฉันมีฮาร์ดไดรฟ์ตัวที่สองและเห็นผลลัพธ์เหมือนกันเมื่อทำงานกับการแก้ไขรีจิสตรีนี้ในไดรฟ์ C ของฉันเหมือนกับที่ฉันทำโดยไม่ใช้ไดรฟ์ D

การเปลี่ยนแปลงนี้ใช้เวลาtime git statusตั้งแต่ 2.5 วินาทีจนถึง 0.7 วินาที

คุณอาจต้องการติดตามhttps://github.com/msysgit/git/pull/94และhttps://github.com/git/git/commit/d637d1b9a8fb765a8542e69bd2e04b3e229f663bเพื่อตรวจสอบว่ามีงานอะไรเพิ่มเติมที่กำลังดำเนินการอยู่ .


10
สิ่งนี้ทำให้เกิดแสงสว่าง แต่อีกครั้งโซลูชันบ้าและ Microsoft ที่คดเคี้ยวไปสู่การแก้ไขปัญหาใน Unix ด้วยวิธีที่เรียบง่ายและสง่างามในปี 2511 ความพยายามในการผลิตเวลาและเงินได้สูญเปล่าจากการขยายตัวของไมโครซอฟท์ ความกล้าทั่วโลก?
v.oddou

20
ฉันจำได้ว่าใช้คอมไพล์กลับมาในปี 68 มันยอดเยี่ยมมาก
Charlie Brown

2
ฮ่าฮ่าหนึ่งปีก่อนที่ Linus จะมา @CharlieBrown
cchamberlain

1
เปิดใช้งานโดยค่าเริ่มต้นใน git 2.1 stackoverflow.com/a/24045966/4854931
Alex78191

18

ดูเหมือนว่าการถอนการติดตั้ง Git อย่างสมบูรณ์การเริ่มต้นใหม่ (การแก้ Windows แบบดั้งเดิม) และการติดตั้ง Git ใหม่เป็นการแก้ ฉันยังลบไฟล์ bash config ทั้งหมดที่เหลืออยู่ (มันสร้างขึ้นเอง) ทุกอย่างรวดเร็วอีกครั้ง

หากมีเหตุผลบางอย่างที่ติดตั้งเป็นไปไม่ได้ (หรือที่พึงประสงค์) แล้วแน่นอนฉันจะลองเปลี่ยนตัวแปร PS1 ที่อ้างอิงในคำตอบที่คริส Dolan ของ ; มันส่งผลให้การเร่งความเร็วที่สำคัญในการดำเนินงานบางอย่าง


3
การติดตั้งใหม่โดยไม่ต้องรีสตาร์ทไม่ทำงานให้ถอนการติดตั้ง - รีสตาร์ท - ติดตั้ง ขอบคุณ! มันคงจะดีถ้ารู้ว่าทำไมและวิธีทุบตีช้าขนาดนั้น
Gauthier

การติดตั้งใหม่ด้วยการรีบูตระหว่างนั้นไม่ได้ทำให้ฉันแตกต่าง
RyanW

@ RyanW ฉันเกรงว่าฉันไม่สามารถช่วยเหลือได้มากกว่าวิธีการแก้ปัญหาข้างต้นที่เหมาะกับฉัน แต่เนื่องจากปัญหานี้ยังไม่ได้รับการแก้ไขอย่างถาวรคุณอาจต้องการติดต่อกับผู้ดูแลระบบของ msysgit และดูว่าพวกเขาสามารถคิดได้อย่างไร สาเหตุของปัญหานี้
Gemini14

3
ไฟล์ bash config ตัวไหนที่คุณล้างออกไปหมด?
Scott

3
นี่ไม่ใช่ทางออกของคำตอบ เมื่อคุณถอนการติดตั้งและติดตั้งไฟล์ config บางไฟล์อาจมีการเปลี่ยนแปลงการเปลี่ยนแปลงเหล่านั้นคือคำตอบ หากคุณบอกว่าการติดตั้งใหม่เป็นวิธีการแก้ปัญหาที่ผิด คนอื่น ๆ อาจถอนการติดตั้งและติดตั้งใหม่และไฟล์การกำหนดค่าอาจเหมือนกันและนั่นเป็นเหตุผลว่าทำไมจึงไม่ทำงานสำหรับทุกคน
Carlos Calla

10

ฉันแก้ไขปัญหา Git ช้าของฉันใน Windows 7 x64 โดยเริ่ม cmd.exe ด้วย "Run as administrator"


10
คำถามพูดถึง git bash
manojlds

2
คุณสามารถรัน git bash ในฐานะผู้ดูแลระบบ; ซึ่งอาจดูเหมือนจะบ่งบอกถึงปัญหา UAC
krosenvold

3
ว้าวการปรับปรุงความเร็วขนาดใหญ่ที่รัน git ทุบตีในฐานะผู้ดูแลระบบ
Evil E

ฉันไม่แน่ใจว่าทำไมคำตอบนี้มีเพียง 6 คะแนนขึ้นไป ฉันคิดว่าคำตอบนี้แก้ปัญหาได้อย่างสมบูรณ์ มีการปรับปรุงความเร็วอย่างมาก
vinoth10

2
@ vinoth10 เอ่อมีปัญหาเกี่ยวกับการทำงานในฐานะผู้ดูแล ซึ่งด้วยเหตุผลหลายประการเป็นความคิดที่ไม่ดีและสำหรับกรณีการใช้งานในองค์กรจำนวนมากนั้นไม่ใช่ตัวเลือกเลย การแก้ไขปัญหาด้านประสิทธิภาพด้วยการยกระดับผู้ใช้เป็นวิธีการที่น่ากลัว
JHH

8

ผมเห็นการปรับปรุงที่ดีโดยการตั้งค่า core.preloadindex จะเป็นจริงตามคำแนะนำของที่นี่


6

ตามที่ระบุไว้ในคริส Dolan และตอบ Wilbert ของPS1 คุณช้าลง

แทนที่จะปิดการใช้งานอย่างสมบูรณ์ (ตามที่แนะนำโดย Dolan) หรือใช้สคริปต์ที่นำเสนอโดย Wilbert ฉันใช้ "dumb PS1" ที่เร็วกว่ามาก

มันใช้(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\]# '

สำหรับ Cygwin ของฉันการทำแบบนี้เร็วกว่าคำตอบ "fast_Git_PS1" ของ Wilbert - 200 ms เทียบกับ 400 ms ดังนั้นมันจะทำให้คุณเฉื่อยชาเล็กน้อย

มันไม่ซับซ้อนเท่า__git_ps1- ตัวอย่างเช่นมันจะไม่เปลี่ยนพรอมต์เมื่อคุณ cd ลงในไดเรกทอรี. git ฯลฯ แต่สำหรับการใช้งานทั่วไปในชีวิตประจำวันมันดีและเร็วพอ

สิ่งนี้ได้รับการทดสอบใน Git 1.7.9 (Cygwin แต่ควรใช้กับแพลตฟอร์มใดก็ได้)


คุณยังสามารถใช้--shortตัวเลือกเพื่อไม่พิมพ์refs/heads/
Friederbluemle

@friederbluemle คุณใช้ git เวอร์ชันใดอยู่ Mine (1.7.9) ไม่ได้มี--shortไว้สำหรับsymbolic-refคำสั่ง
sinelaw

อัปเดตเพื่อไม่พิมพ์ข้อผิดพลาดเมื่ออยู่นอก repo คอมไพล์และทำงานกับ
HEADs

ฉันใช้ 1.8.4 (msysgit)
Friederbluemle

6

คุณอาจได้รับประสิทธิภาพที่ดีขึ้นโดยการเปลี่ยนการกำหนดค่า Git ต่อไปนี้:

git config --global status.submoduleSummary false

เมื่อใช้git statusคำสั่งง่าย ๆบน Window 7 x64 มันใช้เวลาคอมพิวเตอร์ของฉันมากกว่า 30 วินาทีในการทำงาน หลังจากกำหนดอ็อพชันนี้คำสั่งจะถูกส่งทันที

การเปิดใช้งานการติดตามของ Git ตามที่อธิบายไว้ในหน้าต่อไปนี้ช่วยให้ฉันพบต้นกำเนิดของปัญหาซึ่งอาจแตกต่างกันในการติดตั้งของคุณ: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so- ช้า


5

ฉันมีปัญหาเดียวกันทั้ง Git Bash และ Git GUI ทั้งสองโปรแกรมใช้เพื่อให้ทำงานได้ดี แต่จากนั้นพวกเขาสุ่มตัวอย่างช้าลงเพื่อรวบรวมข้อมูลและฉันไม่สามารถหาสาเหตุได้

เมื่อปรากฎว่ามันเป็น Avast Avast ทำให้เกิดสิ่งแปลก ๆ เกิดขึ้นกับโปรแกรมต่าง ๆ (รวมถึงโปรแกรมที่ฉันเขียน) ดังนั้นฉันจึงปิดการใช้งานชั่ววินาทีและตอนนี้ Bash ก็ทำงานได้เร็วเหมือนที่ทำบน Linux ฉันเพิ่งเพิ่มโฟลเดอร์ไฟล์โปรแกรม Git (C:\Program Files\Git ) ลงในรายการยกเว้น Avast และตอนนี้มันทำงานได้เร็วเหมือนบน Linux

และใช่ฉันรู้ว่าซอฟต์แวร์ป้องกันไวรัสไม่ใช่ปัญหาในโพสต์ต้นฉบับ แต่ฉันจะใส่นี่ในกรณีที่เป็นประโยชน์กับใครบางคน


4

นอกเหนือจากคำตอบอื่น ๆ ฉันได้เร่งโครงการที่มีหลาย submodules โดยใช้การดึงข้อมูล submodule แบบขนาน (ตั้งแต่ Git 2.8 ในต้นปี 2559)

สิ่งนี้สามารถทำได้ด้วยgit fetch --recurse-submodules -j8และตั้งค่าด้วยgit config --global submodule.fetchJobs 8หรือหลายแกนที่คุณมี / ต้องการใช้


2

หากคุณใช้ Git จาก cmd ให้ลองเรียกใช้จาก Git Bash ใน cmd, git.exe เป็นเครื่องห่อหุ้มที่ตั้งค่าสภาพแวดล้อมที่ถูกต้องทุกครั้งที่คุณเริ่มใช้งานและจากนั้นจะเปิดใช้งาน git.exe จริง อาจใช้เวลานานถึงสองเท่าในการทำสิ่งที่คุณต้องการ และ Git Bash จะตั้งค่าสภาพแวดล้อมเฉพาะเมื่อมันเริ่มทำงาน



2

คำตอบรวม:

  1. Wilbert's - ข้อมูลอะไรที่จะรวมอยู่ใน PS1
  2. ของ sinelaw - (<branch_name>)หรือ(<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}\] $ '

ผลลัพธ์:

frolowr @ RWAMW36650 / c / โปรเจ็กต์ / elm-math-kids (หลัก) $


ไม่ได้ทำให้เร็วขึ้น
keinabel

@keinabel ในตอนนี้ฉันจะดูcore.commitGraph=trueจากblogs.msdn.microsoft.com/devops/2018/06/25/และอื่น ๆ จากblogs.msdn.microsoft.com/devops/tag/git
rofrol

2

ฉันพบปัญหาเดียวกันกับการเรียกใช้ Git สำหรับ Windows (msysgit) บน Windows 7 x64 เป็นบัญชีผู้ใช้ที่ จำกัด ระยะเวลาหนึ่ง

จากสิ่งที่ฉันได้อ่านที่นี่และสถานที่อื่น ๆ ชุดรูปแบบทั่วไปดูเหมือนจะไม่มีสิทธิ์ผู้ดูแลระบบและ / หรือ UAC เนื่องจาก UAC ปิดอยู่ในระบบของฉันคำอธิบายว่ามันพยายามที่จะเขียน / ลบบางสิ่งในไดเรกทอรีไฟล์โปรแกรมทำให้ฉันรู้สึกว่าเหมาะสมที่สุด

ไม่ว่าในกรณีใดฉันได้แก้ไขปัญหาของฉันโดยการติดตั้ง Git 1.8 รุ่นพกพาด้วย zipinstaller โปรดทราบว่าฉันต้องแกะไฟล์การแจกจ่าย. 7z ออกแล้วบรรจุใหม่เป็นไฟล์ ZIP เพื่อให้ zipinstaller ทำงาน ฉันต้องเพิ่มไดเรกทอรีนั้นไปยังเส้นทางของระบบด้วยตนเอง

ประสิทธิภาพดีขึ้นแล้ว แม้ว่าจะติดตั้งในProgram Files (x86)ไดเรกทอรีซึ่งฉันไม่ได้รับอนุญาตให้ใช้งานในฐานะผู้ใช้ที่ จำกัด แต่ดูเหมือนว่าจะไม่ประสบปัญหาเดียวกัน

ฉันอธิบายว่านี่เป็นความจริงที่ว่ารุ่นพกพานั้นค่อนข้างอนุรักษ์นิยมมากกว่าเมื่อมันเขียน / ลบไฟล์ซึ่งอาจเป็นกรณีหรือเพื่ออัพเกรดจาก 1.7 เป็น 1.8 ฉันจะไม่พยายามที่จะปักหลักเหตุผลข้อใดข้อหนึ่งซึ่งเพียงพอแล้วที่จะบอกว่ามันใช้งานได้ดีขึ้นมากในขณะนี้รวมถึง Bash


1
การปิด UAC ดูเหมือนว่าจะแก้ปัญหาส่วน "ใหญ่" ของเรา (ล่าช้าหลายวินาที) แฮ็ค ps1 ทำหน้าที่เหลือ
krosenvold

ฉันอยู่บน SSD, 32GB RAM และ quad core i7 และไม่มีคำตอบอื่นใดที่ช่วยให้ปิดใช้งาน UAC, รีสตาร์ทและคำสั่ง git ได้ทันที
phil_lgr

2

ในกรณีของฉันมันเป็นโปรแกรมป้องกันไวรัส Avast ที่นำไปสู่ ​​Git Bash และแม้แต่ PowerShell ก็ช้ามาก

ก่อนอื่นฉันลองปิดการใช้งาน Avast เป็นเวลา 10 นาทีเพื่อดูว่ามันปรับปรุงความเร็วได้หรือไม่ หลังจากนั้นฉันเพิ่มไดเรกทอรีการติดตั้ง Git Bash ทั้งหมดเป็นข้อยกเว้นใน Avast สำหรับอ่านเขียนและดำเนินการ C:\Program Files\Git\*ในกรณีของฉันที่เป็น


ฉันต้องการยืนยันเคล็ดลับนี้ ไม่รวมคอมไพล์จาก Avast ทำให้เร็วขึ้นจริงๆ ฉันเห็นสถานะคอมไพล์โดยไม่ต้องรออีกต่อไป ชนะ 7 x64
fajarhac

โปรแกรมป้องกันไวรัสรบกวนเท่านั้น
Alex78191

1
ขอบคุณนั่นเป็นชัยชนะอย่างรวดเร็ว! ปิดใช้งาน avast เป็นเวลา 10 นาทีสังเกตว่ามีการเปลี่ยนแปลงอย่างรวดเร็วในประสิทธิภาพของ git (เช่นกลับสู่เวลาดำเนินการปกติ)
Marcello Romani

วิธีนี้ใช้ได้ผลสำหรับฉัน McAfee + Windows 10 Ent
FractalSpace

1

ไม่มีสิ่งใดที่สามารถช่วยฉันได้ ในสถานการณ์ของฉันปัญหาก็แสดงตัวเองเช่นนี้:

  • llคำสั่งใด ๆช้า (ใช้เวลาประมาณ 3 วินาทีในการดำเนินการ)
  • ภายหลังllคำสั่งดำเนินการทันทีแต่ถ้าภายใน 45 วินาทีจากคำสั่งคำสั่ง

เมื่อมาถึงการดีบักด้วยการตรวจสอบกระบวนการพบว่าก่อนทุกคำสั่งมีการร้องขอ DNS

ดังนั้นทันทีที่ฉันปิดไฟร์วอลล์ (Comodo ในกรณีของฉัน) และให้คำสั่งดำเนินการปัญหาหายไป และจะไม่กลับมาเมื่อเปิดไฟร์วอลล์อีกครั้ง ด้วยโอกาสแรกสุดฉันจะอัปเดตการตอบกลับนี้พร้อมรายละเอียดเพิ่มเติมเกี่ยวกับกระบวนการที่กำลังดำเนินการคำขอ DNS ที่บล็อกและเป้าหมายคืออะไร

อาร์จี


llเป็นนามแฝงเพื่อlog? ดูเหมือนว่าจะมีคำขอ DNS สำหรับสิ่งนั้น
ไมเคิล - Clay Shirky ของ

1
llls -lเป็นนามแฝงสำหรับ และมันก็แปลกที่จะเรียกใช้คำร้องขอ DNS ต่อไป ... ในขณะนี้ฉันยังรอให้ปัญหานี้ปรากฏขึ้นอีกครั้งเพื่อเพิ่มรายละเอียดเพิ่มเติมในการตอบกลับ
จอร์จ

1

ในกรณีของฉันทางลัด Git Bash ถูกตั้งค่าเป็นStart in:%HOMEDRIVE%%HOMEPATH%(คุณสามารถตรวจสอบได้โดยคลิกขวาที่ Git Bash และเลือกคุณสมบัติ) นี่คือไดรฟ์เครือข่าย

%HOME%การแก้ปัญหาคือการทำให้มันชี้ไปที่ หากคุณไม่มีคุณสามารถตั้งค่าในตัวแปรสภาพแวดล้อมและตอนนี้ Git Bash น่าจะเร็วเกินไป


ฉันคิดว่าคำตอบนี้ควรได้รับการโหวตมากขึ้น ฉันมาที่นี่เพื่อโพสต์คำแนะนำเดียวกันนี้ แต่เห็นคุณชนะฉันไปแล้วฮ่า ๆ
Jon

0

ฉันยังมีปัญหากับความเชื่องช้าของ PS1 git แต่เป็นเวลานานที่ฉันคิดว่ามันเป็นปัญหาขนาดฐานข้อมูล (พื้นที่เก็บข้อมูลขนาดใหญ่) และกำลังพยายามใช้git gcเทคนิคต่าง ๆและกำลังมองหาเหตุผลอื่น ๆ เช่นเดียวกับคุณ อย่างไรก็ตามในกรณีของฉันปัญหาคือบรรทัดนี้:

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
}

การทำgit statusสำหรับสถานะบรรทัดคำสั่งทุกบรรทัดช้า อุ๊ยตาย มันเป็นสิ่งที่ฉันเขียนด้วยมือ ฉันเห็นว่าเป็นปัญหาเมื่อฉันลอง

export PS1='$'

เหมือนที่กล่าวไว้ในคำตอบเดียวที่นี่ บรรทัดคำสั่งนั้นเร็วมาก

ตอนนี้ฉันกำลังใช้สิ่งนี้:

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

จาก Stack Overflow โพสต์บรรทัด PS1 ด้วย git ปัจจุบันสาขาและสีและมันทำงานได้ดี มีบรรทัดคำสั่ง Git ที่รวดเร็วอีกครั้ง


ดังนั้นปัญหาของคุณเกิดจากสคริปต์ที่คุณเขียน? บางทีสคริปต์นั้นอาจไม่เป็นสาเหตุสำหรับผู้ใช้รายอื่นที่ค้นหาปัญหาเดียวกัน ...
Jolta

ดูคำถาม OP - เขาพูดถึงสิ่งต่าง ๆ มากมายที่เขาตรวจสอบและยังไม่เป็นเช่นนั้น เช่นเดียวกันกับฉัน ดังนั้นที่นี่ฉันเพิ่มสิ่งอื่นที่จะตรวจสอบเมื่อไม่มีอะไรช่วย และไม่ใช่สคริปต์เฉพาะที่ฉันเขียนซึ่งสำคัญ แต่เป็นแนวคิด - ลองดู PS1 ของคุณ
Koshmaar

0

เพื่อนร่วมงานของฉันมีปัญหากับ Git บน Windows (7) git status checkoutและaddรวดเร็ว แต่git commitใช้เวลานานมาก

เรายังคงพยายามค้นหาสาเหตุที่แท้จริงของสิ่งนี้ แต่การโคลนที่เก็บลงในโฟลเดอร์ใหม่ช่วยแก้ปัญหาของเขา


0

ดังที่หลายคนกล่าวว่านี่เป็นเพราะstashเชลล์สคริปต์บน Windows แต่เนื่องจาก Git 2.18.0 ตัวติดตั้ง Windows มีตัวเลือกสำหรับคุณลักษณะการทดลองที่มีอยู่ในตัวเร็วกว่า (90%) รุ่น stash - https: / /github.com/git-for-windows/build-extra/pull/203


ที่ช่วยด้วยstashแต่คุณเป็นโพสต์แรกที่กล่าวถึงstashโดยเฉพาะ มันส่งผลกระทบต่อการดำเนินการอื่น ๆ ของ Git หรือไม่?
ไมเคิล - ที่ไหน Clay Shirky

เท่าที่ฉันเข้าใจไม่มี Tthere เป็นคุณลักษณะทดลอง 2 อย่างในการแสดงตัวอย่างที่อนุญาตให้มีstashและ / หรือการrebaseใช้งานโปรแกรมแบบเนทีฟเพื่อประสิทธิภาพที่ดีขึ้น แต่ด้วยสิ่งใดก็ตามในภาพตัวอย่างมีโอกาสเล็กน้อยที่อาจมีผลข้างเคียงเล็กน้อย
bergmeister

1
PS ฟีเจอร์นี้มีการแสดงตัวอย่างใน v 2.19.1 ดังนั้นคุณจะไม่ได้รับตัวเลือกเพิ่มเติมอีกเลย
bergmeister
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.