Msysgit bash chậm khủng khiếp trong Windows 7


84

Tôi thích git và sử dụng nó trên OS X khá nhiều liên tục ở nhà. Tại nơi làm việc, chúng tôi sử dụng svn trên Windows, nhưng muốn chuyển sang git ngay khi các công cụ đã hoàn thiện đầy đủ (không chỉ TortoiseGit , mà còn là một cái gì đó tương tự như tích hợp Visual Studio thực sự tốt đẹp do VisualSVN cung cấp ). Nhưng tôi lạc đề...

Gần đây tôi đã cài đặt msysgit trên máy tính Windows 7 của tôi, và khi sử dụng các phiên bản bao gồm của bash, nó là kinh khủng chậm. Và không chỉ các hoạt động git; clearmất khoảng năm giây . AAAAH!

Có ai gặp vấn đề tương tự không?


Chỉnh sửa : Có vẻ như msysgit không chơi tốt với UAC và có thể chỉ là một lỗi thiết kế nhỏ do phát triển trên XP hoặc chạy Vista hoặc 7 với UAC bị vô hiệu hóa; khởi động Git Bash bằng cách sử dụng Run as administratorkết quả với tốc độ cực nhanh mà tôi thấy với OS X (hoặc trên 7 sau khi bắt đầu kết nối mạng với Git Bash - xem câu trả lời @Gauthier).

Chỉnh sửa 2 : AH HA! Hãy xem câu trả lời của tôi.


Không chậm 5 giây, không. Nó sẽ chậm hơn, nhưng nhanh hơn phiên bản Cygwin.
Yann Ramin

@theatrus: Tôi thực sự đã sử dụng đồng hồ bấm giờ vừa rồi. Mức trung bình là 3,8 giây. Vì vậy, bạn đúng, nhưng vẫn có điều gì đó sai sâu sắc.
Kevin L.

Một msysgit suy thoái khác là một phiên bản cũ của OpenSSH được ghi chép lại đây darrell.mozingo.net/2011/09/29/...
JodaStephen

Xem trang wiki của msysgit trên trang này: github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so-slow
Drew Noakes

1
Bản sao Git / Bash
Joshua Taylor

Câu trả lời:


54

Bạn có thể tăng tốc đáng kể Git trên Windows bằng cách chạy ba lệnh để đặt một số tùy chọn cấu hình:

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

Ghi chú:

  • core.preloadindex có hoạt động hệ thống tệp song song để ẩn độ trễ (cập nhật: được bật theo mặc định trong git 2.1)

  • core.fscache khắc phục sự cố UAC để bạn không cần chạy Git với tư cách quản trị viên (cập nhật: được bật theo mặc định trong Git cho Windows 2.8)

  • gc.auto giảm thiểu số lượng tệp trong .git /


Đây sẽ là câu trả lời được chấp nhận. Hoạt động như một sự quyến rũ!
krlmlr

8
Điều này không làm việc cho tôi. Git bash của tôi vẫn bị trễ 1-2 giây sau khi tôi ra lệnh.
Jaskey,

Làm việc như một cái duyên đối với tôi; đã đưa trạng thái git của tôi trên một repo lớn giảm từ 13 giây xuống 0,7 giây
noelob

2
git config --global core.fscache truekhông làm gì cho tôi; tuy nhiên, git config core.fscache trueđã lừa. Theo điều này , đó là bởi vì core.fscache là một cài đặt cho mỗi repo.
David Merriman

2
@DavidMerriman Nhận xét "mỗi repo" chỉ đơn giản là nói rằng bạn có thể thay đổi cài đặt này trên từng repo. (Điều này đúng với tất cả các cài đặt, vì vậy tôi không biết tại sao nó lại được đề cập đến.) Nhận xét không có nghĩa là fscache chỉ hoạt động như một cài đặt cho mỗi repo. Cài đặt chung áp dụng cho tất cả các kho lưu trữ trên một máy trừ khi bị ghi đè bởi mỗi cài đặt kho lưu trữ.
cụ đánh giày vào

37

Giải pháp cho sự chậm chạp trên Vista hoặc 7 dường như đang chạy Git Bash bằng cách sử dụng Run as administrator(hoặc tắt UAC cho phím tắt Git Bash ... hoặc tắt hoàn toàn UAC ). Sự khác biệt là đêm và ngày và việc sử dụng git trên 7 lại thật tuyệt vời.

Điều này dường như có liên quan đến một vấn đề đã biết và như tôi đã suy đoán, XP với tư cách là môi trường phát triển cho msysgit chịu trách nhiệm một phần.


Gợi ý hay (dù chỉ là vô tình :)). Chạy "git svn clone" trong Windows 2008 R2 với 1.7.4 chậm kinh khủng đối với tôi (có hơn 5000 cam kết trong SVN và phải mất vài tuần mới có được một nửa của nó) ... Bạn cho tôi ý tưởng để thử nó trong môi trường "gốc" của nó, trên XP và nó thực sự rất nhanh. Cảm ơn!
bdrajer

1
Tôi đã vô hiệu hóa UAC và cố gắng chạy ở người quản lý, và vẫn mỗi lệnh tôi nhập vào Git Bash mất khoảng 5 giây để chạy (thậm chí chỉ lstrong một thư mục trống rỗng)
Robin Winslow

4
Thay vào đó, câu trả lời trong câu hỏi này phù hợp với tôi: stackoverflow.com/questions/4485059/…
Robin Winslow

Việc di chuyển các repo sang một phân vùng không thuộc hệ thống cũng cho thấy sự gia tăng hiệu suất lớn đối với nhóm của tôi và ngăn chặn sự cố ngẫu nhiên "không thể tạo tệp" khi thanh toán.
Laurence

1
tôi đã cố gắng rất nhiều giải pháp .. cái này (chạy as administrator) cuối cùng đã làm việc cho tôi .. bây giờ git của tôi là nhanh như chớp một lần nữa .. nhờ .. :)
awesim

14

Đối với tôi, vấn đề là do sử dụng __git_ps1 trong dấu nhắc trình bao - tôi đoán là do truy cập đĩa chậm trong msysgit.

Giải pháp là xóa $ (__ git_ps1) khỏi các dòng PS1 = ... trong / etc / profile

kiểm tra nhanh nếu giải pháp này áp dụng: trong git shell, gõ export PS1 = '$' và kiểm tra tốc độ hoạt động của bạn.


Cảm ơn! Đây hóa ra là vấn đề của tôi trên Windows XP. Xem stackoverflow.com/q/5851611/200688
AndyL

2
Bạn có thể cho phép __git_ps1hoạt động, nếu bạn tắt cài đặt SHOWDIRTYSTATE và / hoặc SHOWUNTRACKEDFILES, hãy xem stackoverflow.com/a/4203968/321973
Tobias Kienzler,

Đây là tất cả những gì tôi đã làm trên Windows 7. Đặc biệt may mắn là máy này không bị khóa mà không có quyền quản trị viên!
Air

12

Đã thử tất cả các mẹo ở đây (bao gồm cả mẹo từ câu trả lời khác của tôi) trên một chiếc máy mới, nhưng chúng không hoạt động, Git vẫn chậm như cũ.

Sau đó, tôi đã xem xét phần mềm quét vi -rút (đã được cài đặt sẵn): Tôi đã tắt tính năng quét theo thời gian thực của Trung tâm Bảo mật McAfee và presto: git hiện đang rất nhanh! Thời gian cần thiết cho "git svn rebase" giảm từ 30 giây xuống 5 giây (!).

Tôi hy vọng điều này sẽ hữu ích cho những người khác vẫn gặp vấn đề với Git chậm trên Windows, tôi đã mất hàng giờ để tìm ra điều này.


4
Git Bash của tôi cũng bắt đầu chậm trước đó, sau khi tôi thêm toàn bộ đường dẫn cài đặt git vào đường dẫn loại trừ của Avast! Anti-Virus Suite, bắt đầu bash git giảm hơn 0.5s
zhxchen17

Đây là câu trả lời cho tôi !! Tôi sử dụng AVG Miễn phí. Tôi vừa vô hiệu hóa nó được 10 phút, đột nhiên con veeerrryyyy chậm chạp bash nhanh như chớp.
Mörre

Đối với những người sử dụng Bộ bảo vệ Windows, bạn có thể loại trừ một thư mục hoặc quy trình. Xem support.microsoft.com/en-us/help/4028485/…
Ehtesh Choudhury,

9

Alas 'Run as Administrator' không hoạt động với tôi - nhưng như Kevin L nhận thấy, việc ngắt kết nối bộ điều hợp mạng, khởi chạy git bash, sau đó kết nối lại hoạt động tốt. Vì vậy, tôi đã gói nó trong một tập lệnh lô và đặt một phím tắt cho nó trong menu Bắt đầu của tôi, được gắn cờ để chạy với tư cách quản trị viên:

netsh interface set interface "Local Area Connection" DISABLED
cd "%USERPROFILE%\Documents\Visual Studio 2010\Projects"
start cmd /c ""C:\Program Files\Git\bin\sh.exe" --login -i"
netsh interface set interface "Local Area Connection" ENABLED

Hoạt động tốt miễn là tôi nhớ mạng của tôi bị ngắt trong giây lát.

(Win 7 Professional SP1, phiên bản Git 1.7.8-preview20111206)


5

Một đồng nghiệp của tôi có hành vi này bất cứ khi nào Outlook đang chạy. Đang thử giết triển vọng và kiểm tra lại.

Bạn cũng có thể thử kiểm tra:

  • không có kết nối với bất kỳ mạng nào,
  • mà không có phần mềm chống vi-rút đang chạy,
  • mà không có bất kỳ chương trình nào khác đang chạy.

3
Cả Outlook và phần mềm chống vi-rút dường như không có bất kỳ tác dụng nào, nhưng nếu tôi vô hiệu hóa kết nối mạng của mình rồi khởi động git, thì tốc độ nhanh như chớp (đọc: "Unix"), ngay cả sau khi tôi kết nối lại. Thú vị ...
Kevin L.

Vâng. Và git bash vẫn nhanh (cho đến khi tôi đóng nó và mở một phiên bản khác).
Kevin L.

2
Kết nối mạng cũng làm việc cho tôi. Tôi tự hỏi nó có liên quan gì đến kết nối mạng. Và kỳ lạ là nó hoạt động hoàn toàn tốt ở mạng gia đình của tôi nhưng lại từ chối hoạt động trên mạng văn phòng của tôi.
Sarath,

Điều này đã khắc phục sự cố của tôi trên Windows 7 Professional 64-bit trên iMac hoàn toàn mới. Chúc mừng!
longda

+1 chống vi-rút như được đề xuất là nguyên nhân trên hệ thống cụ thể của tôi. windows 7 x64 cuối cùng. UAC (được đề cập ở nơi khác) không tạo ra sự khác biệt đáng buồn. cảm ơn mọi người
MickyD 10/12/11

3

Chúng tôi nhận thấy rằng, khi chạy trên một số tài khoản người dùng nhất định, các phiên bản git.exe riêng biệt bị chặn khi gọi đến WaitForSingleObject(), do đó, chỉ một thao tác git.exe duy nhất có thể chạy hiệu quả cùng một lúc. Thay đổi tài khoản người dùng đã giải quyết được vấn đề này.

Thông tin chi tiết tại đây: https://stackoverflow.com/a/13054022


3

Tôi có MacAffee và yêu cầu nó loại trừ thư mục .git và tất cả các thư mục con khỏi quá trình quét theo thời gian thực đã giải quyết vấn đề hiệu suất.


1
Bạn có thể loại trừ toàn bộ đĩa cứng không? ;-).
Peter - Khôi phục Monica

1

Như được tìm thấy trong vấn đề này , việc chạy với ảo hóa UAC được tắt (không cần thiết phải tắt hoàn toàn UAC) tạo ra sự khác biệt lớn.

Bài đăng này giải thích cách tắt nó (xem phần cuối của bài đăng, chỉ một cài đặt đăng ký).

Trên một repo SVN (lớn) mà tôi đang kết nối, chỉ thực hiện thay đổi ở trên đã giảm thời gian cần thiết cho "git svn rebase" từ 15 giây xuống 5 giây, một cải tiến yếu tố 3.


Đây vấn đề (theo dõi) đã bị đóng cửa, những vấn đề mới về vấn đề này là: github.com/msysgit/git/issues/94
childno͡.de

1

Một giải pháp thay thế để gây rối với Windows 7 UAC có thể là cài đặt mysysgit bên ngoài thư mục Program Files của bạn. Ví dụ: thay vì "C: \ Program Files (x86) \ Git", hãy thử cài đặt trong "C: \ git"

Tôi đã thử nghịch với các điều khiển 'Run as admin' và UAC nhưng không có kết quả, nhưng đã từ bỏ và bắt đầu lại một cài đặt mới. Tôi đã nhận được tối đa khoảng 15KiB / s trước đây, nhưng bây giờ là hơn 60kiB / s.


1

Nếu tắt UAC không cải thiện hiệu suất, hãy thử tắt trình điều khiển luafv. Điều này đã hiệu quả với tôi sau khi thử hầu hết mọi thứ trên trang này và một vài câu hỏi tương tự. Git đã đi từ chậm đến mức khá.

Mở 'regedit' và tìm khóa đăng ký

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services/luafv

Thay đổi giá trị Starttừ 2 thành 4.

Tôi đã tìm thấy chi tiết về cách tắt luafv ở đây . Lưu ý rằng cá nhân tôi không biết gìluafv đang hoặc hiện. Trang đó đưa ra nhiều cảnh báo khác nhau về những điều xấu có thể xảy ra nếu bạn tắt nó đi, điều mà bạn có thể nên xem xét nghiêm túc.

CHỈNH SỬA: Nhận xét bên dưới chỉ ra rằng tôi đã hiểu sai cách (liên kết có nó theo cách đúng). Nó đã được sửa ngay bây giờ. Xin lỗi những người mà tôi đã chuyển đăng ký vào thùng rác :)


Của tôi được đặt thành 2 theo mặc định. Vẫn còn khá chậm.
imanuelcostigan

@imanuelc: trớ trêu thay, bây giờ của tôi quá (trên máy tính mới) và nó cũng chậm.
jwg

2
Điều này là không chính xác. Nó nên được thay đổi từ 2 thành 4. 2 có nghĩa là tự động khởi động lại. 4 nghĩa là bị vô hiệu hóa.
richb

1

Tôi vừa mới khắc phục sự cố này một lúc và gặp khó khăn khi xác định nguồn gốc của sự cố. Cuối cùng, tôi tìm thấy hai điều có tác động mạnh mẽ:

  • Đang tắt dịch vụ Tìm kiếm của Windows. Điều này đã có một ảnh hưởng đáng kể đến hiệu suất.
  • Đóng tiện ích mở rộng Git. Việc mở cửa sổ Duyệt của phần mở rộng Git trong nền khiến thời gian thực thi lệnh git của Cygwin tăng lên theo một hệ số dường như ngẫu nhiên lên đến khoảng 10.

0

Vấn đề ở đây có thể là quá trình hoàn thành bash nếu được bật, điều này trên Windows khá chậm hơn Linux một chút.

Hãy thử đặt biến PS1 thành một cái gì đó đơn giản như "$" và xem điều này có tăng tốc độ không. Nếu có, hãy lưu ý rằng có một số tối ưu hóa để hoàn thành bash trong các phiên bản git-ish gần đây. Có lẽ bạn cần phải nâng cấp.


1
Tôi đang chạy phiên bản mới nhất tuyệt đối (xem nhận xét của tôi về câu trả lời của VonC ở trên). Nhưng tôi sẽ thử điều này.
Kevin L.

1.7.0.2 không nhất thiết phải là lợi thế trong bối cảnh này. Những tối ưu hóa mà tôi đang nói đến đã xảy ra trong ngược dòng-git. Tôi không chắc liệu họ có sử dụng phiên bản 1.7.0.2 của Git cho Windows hay không.
kusma

0

Điều này đã làm việc cho tôi. Đừng mong đợi nó sẽ là một kích thước phù hợp với tất cả các giải pháp.

Kiểm tra biến môi trường $ HOME trong bash và windows. Nếu nó trỏ đến tài khoản người dùng, hãy kiểm tra hồ sơ / quyền trên windows của người dùng. Thay đổi tài khoản người dùng hoặc $ HOME cho phù hợp.


6
Vui lòng giải thích thêm về những hồ sơ / hoán vị đáng ngại này một chút được không?
Tobias Kienzler

0

Tôi đã gặp sự cố tương tự khi chạy git cho Windows (msysgit) trên Windows 7 x64 dưới dạng tài khoản người dùng hạn chế trong một thời gian khá dài. Từ những gì tôi đã đọc ở đây và những nơi khác, chủ đề chung dường như là thiếu đặc quyền quản trị và / hoặc UAC. Vì UAC đã tắt trên hệ thống của tôi, giải thích rằng nó đang cố gắng ghi / xóa một cái gì đó trong thư mục tệp chương trình có ý nghĩa nhất đối với tôi.

Trong mọi trường hợp, tôi đã giải quyết sự cố của mình bằng cách cài đặt phiên bản di động của git 1.8 với trình cài đặt zip. Lưu ý rằng tôi phải giải nén tệp phân phối .7z và đóng gói lại dưới dạng zip để trình cài đặt zip hoạt động. Tôi cũng phải thêm thủ công thư mục đó vào đường dẫn hệ thống của mình.

Hiệu suất là tốt bây giờ. Mặc dù nó được cài đặt trong thư mục Program Files (x86) mà tôi không có quyền với tư cách là một người dùng hạn chế, nó dường như không gặp phải vấn đề tương tự. Tôi xác nhận điều này là do phiên bản portable có chút thận trọng hơn trong việc ghi / xóa tệp, có thể là trường hợp này hoặc nâng cấp từ 1.7 lên 1.8. Tôi sẽ không cố gắng xác định lý do nào là lý do, đủ để nói rằng nó hoạt động tốt hơn nhiều bây giờ.


0

Bạn có thể muốn thử gỡ cài đặt msysgit, khởi động lại cửa sổ, cài đặt phiên bản mới nhất của msysgit. Nó dường như làm một mẹo cho tôi. Tôi tìm thấy đề xuất này ở đây:

https://stackoverflow.com/a/4506192/1413941

BIÊN TẬP

Tái bút Tôi đã vô hiệu hóa UAC trước khi gặp sự cố Git chậm, vì vậy tôi không biết liệu việc tắt UAC có cần thiết hay không để Git hoạt động nhanh.


0

Giải pháp tốt nhất là chạy với tư cách quản trị viên, như đã chỉ ra. Tuy nhiên, một tùy chọn khác để làm cho trạng thái git nhanh, ít nhất, là trustctime = false . Trước đó, trạng thái git mất khoảng 30 giây và sau đó, nó cũng là số lượng được hiển thị trong đầu ra - Mất X giây để ...


0

Bạn cũng có thể đạt được hiệu suất tăng quan trọng bằng cách thay đổi cấu hình git sau:

git config --global status.submoduleSummary false

Khi chạy git statuslệnh đơn giản trên Window 7 x64, máy tính của tôi mất hơn 30 giây để chạy. Sau khi tùy chọn này được xác định, lệnh sẽ được thực hiện ngay lập tức.

Việc kích hoạt theo dõi riêng của Git như được giải thích trong trang sau đã giúp tôi tìm ra nguồn gốc của vấn đề, có thể khác trong cài đặt của bạn: https://github.com/msysgit/msysgit/wiki/Diagnosing-why-Git-is-so- chậm


-4

Đó có thể là vấn đề của lời nhắc phân tích kho lưu trữ Git của bạn. Bạn có thể kiểm tra bằng cách thực hiện "xóa" ở đâu đó bên ngoài kho lưu trữ Git. Và bạn có thể tăng tốc nó bằng cách vá git-complete.bash hoặc bằng cách chơi các thủ thuật với core.filemode.

Đối với tích hợp Visual Studio: Đây là Mã nguồn mở. Thật không công bằng khi mong đợi người khác làm việc miễn phí cho bạn.

Tôi cũng thấy khá buồn cười khi không đặt câu hỏi trong danh sách gửi thư msysGit, nhưng bây giờ tôi lại lạc đề.


5
Không được phép bốc cháy trên StackOverflow. Hãy cố gắng giữ cho thuyết trình dân dụng hơn
phord

1
Nó là buồn cười. Nhận xét của tôi là nhận xét duy nhất với thông tin kỹ thuật cụ thể. Đề nghị hỗ trợ giúp khắc phục sự cố vẫn còn mở, bạn biết không? Và tất nhiên tôi khá khó chịu vì vấn đề đã được nêu ra ở đây, trên stackoverflow, mà tôi không theo dõi và phải được người khác chỉ ra cho tôi. Tôi muốn nghe về vấn đề này trực tiếp. Tôi không biết bạn thế nào, nhưng tôi thấy thật bất công khi dự án ban đầu thậm chí không được thông báo về các vấn đề.
Dscho,

Hai năm sau, tôi đồng ý. Tôi đã quá khắc nghiệt. Xin lỗi, Dscho. Danh sách gửi thư của nhà phát triển git thực sự hữu ích.
phord

2
@Dscho, bạn nên hiểu rằng mọi người thường đăng bài ở đây trước tiên vì họ muốn kiểm tra xem không có vấn đề về cấu hình hoặc nền tảng nào, đó không phải là lỗi trong Git gây ra sự cố của họ.
jwg 14/02/13
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.