Git Bash cực kỳ chậm trên Windows 7 x64


434

Tôi đã sử dụng Git trên cả Windows và Ubuntu trong quá trình phát triển một dự án nhỏ, thường xuyên lật qua lại giữa hai dự án. Vấn đề là Git Bash liên tục trở nên chậm chạp.

Khi tôi nói chậm, tôi có nghĩa là chạy cdmất từ ​​8-25 giây, chạy gitlệnh mất từ ​​5-20 giây và lsđôi khi có thể mất tới 30 giây. Không cần phải nói, điều này không vui, không đề cập đến việc không hiệu quả. Tôi biết Git chậm hơn trên Windows, nhưng điều này thật vô lý.

Một giải pháp đã hoạt động - tạm thời - đối với tôi là vô hiệu hóa kết nối mạng của tôi (như được đề xuất trong câu trả lời này ), bắt đầu Git Bash, và sau đó kết nối lại. Đôi khi nó tiếp tục chạy nhanh trong nhiều ngày sau khi làm điều đó, nhưng hiệu suất luôn suy giảm cuối cùng. Tôi đã duyệt qua nhóm thảo luận msysgit, Stack Overflow, danh sách vấn đề msysgit, v.v. trong nhiều tuần, nhưng tôi không thể bật các giải pháp hiệu quả.

Cho đến nay, tôi đã thử:

  • Thêm thư mục Git & dự án vào danh sách loại trừ của trình quét vi-rút
  • Vô hiệu hóa hoàn toàn trình quét vi-rút của tôi (Kaspersky IS 2011)
  • Đảm bảo rằng Outlook không chạy (Outlook 2007)
  • Tắt tất cả các ứng dụng khác
  • Chạy Git Bash với tư cách quản trị viên
  • Vô hiệu hóa kết nối mạng, khởi động Git Bash và giữ kết nối bị tắt
  • Vô hiệu hóa kết nối mạng, bắt đầu Git Bash, bật lại kết nối (chỉ hoạt động đôi khi)
  • Đang chạy git gc
  • Và sự kết hợp của những điều trên

Tôi đã đọc được rằng một vài người đã thành công trong việc vô hiệu hóa hoàn thành Bash, nhưng lý tưởng nhất là tôi muốn duy trì hoạt động đó. Phiên bản của msysgit là 1.7.3.1-preview20101002 và HĐH là Windows 7 x64. Chạy những thứ tương tự trên Linux, dự đoán là nhanh như chớp. Tôi cũng sẽ sử dụng Linux, nhưng tôi cũng cần chạy mọi thứ trong Windows (một số ứng dụng, thử nghiệm, v.v.).

Có ai gặp phải một vấn đề tương tự? Nếu vậy, vấn đề tiềm ẩn là gì và giải pháp (nếu có) là gì?

Điều này mở rộng ra ngoài kho lưu trữ Git, nhưng chỉ để tham khảo, các kho lưu trữ mà tôi đã sử dụng Git khá nhỏ: tối đa ~ 4-50 tệp.


1
Không làm bạn nản lòng nhưng Cygwin rất chậm trên x64, tốt nhất bạn nên thử nó trên Windows XP 32bit.
ismail


5
Trên cùng một hệ thống, nó đã không chậm nửa năm trước. Họ phải thay đổi một cái gì đó ...
Tomáš Zato - Tái lập lại

2
Trên hầu hết tất cả các máy ở đây: Kaspersky AV ồ ạt làm chậm git "vô hiệu hóa" Kaspersky bị hỏng, avp.exe vẫn chạy sau khi thoát hoàn toàn. Hoàn thành cài đặt lại kaspersky thường khắc phục vấn đề sau.
peterchen

2
Xem trang wiki của msysgit về điều này: github.com/msysgit/msysgit/wiki/Diagnose-why-Git-is-so-slow
Drew Noakes

Câu trả lời:


410

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ác hoạt động của hệ thống tập tin song song để che giấu độ trễ (cập nhật: được bật theo mặc định trong Git 2.1)

  • core.fscache sửa cá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 /


Không giúp tôi, nhưng đã giúp xuất PS1 = '$' được đề cập bên dưới. Vì vậy, tôi biết vấn đề là dòng thiết bị đầu cuối.
Koshmaar

67
Cài đặt hoàn toàn vô dụng trong năm 2017 (git 2.12) vì tất cả nội dung này được bật theo mặc định. Nhưng git vẫn hoạt động chậm như cứt.
tức là chấp nhận

2
Hoạt động tốt trên Windows 10 cũng có. Làm tốt lắm và cảm ơn bạn vì điều này @shoelzer!
Joe

1
Giới hạn tệp đến 256 có thể gây ra một số vấn đề. Và hai tùy chọn đầu tiên đã được kích hoạt trên các phiên bản mới của git.
nPcomp

@sonyvizio Loại vấn đề gì?
đánh giày

102

Bạn có thông tin Git hiển thị trong dấu nhắc Bash của bạn không? Nếu vậy, có thể bạn đang vô tình làm quá nhiều công việc cho mỗi lệnh. Để kiểm tra lý thuyết này, hãy thử thay đổi tạm thời sau đây trong Bash:

export PS1='$'

11
Vấn đề là với $(__git_ps1)... loại bỏ điều này làm cho mọi thứ trở nên cực nhanh
Hendy I Girls

10
Đối với những người không quen biết giữa chúng ta, chính xác lệnh này làm gì? Bạn nói đó là "tạm thời", làm thế nào để chúng ta hoàn nguyên lệnh?
Bất tử màu xanh

5
Cũng sửa các vấn đề hiệu suất của tôi. Để khắc phục vĩnh viễn, hãy chỉnh sửa C:\Program Files (x86\Git\etc\profilevà nhận xét if-then-other nơi __git_ps1được thêm vào PS1.
Tom

6
Trong phiên bản hiện tại 2.18.0, tôi không thể tìm thấy lệnh __git_ps1 trong / etc / profile. Nó đã di chuyển đi nơi khác?
keinabel

8
Có vẻ như nó đã được chuyển sang C: \ Program Files \ Git \ etc \ profile.d \ git-prompt.sh. Tôi đã nhận xét __git_ps1 trong tệp đó và nó đã đi nhanh hơn nhiều (nhưng mất thông tin chi nhánh nhanh chóng)
Miyagi

85

Thư mục nhà Windows của tôi nằm trên mạng và tôi nghi ngờ rằng các lệnh Git Bash đang tìm kiếm ở đó trước tiên. Chắc chắn, khi tôi nhìn vào $PATH, nó được liệt kê /h/binđầu tiên, nơi /hchia sẻ trên máy chủ tệp Windows, mặc dù /h/binkhông tồn tại.
Tôi đã chỉnh sửa /etc/profilevà nhận xét lệnh xuất khẩu đặt nó lên hàng đầu $PATH:

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

Điều này làm cho các lệnh của tôi chạy nhanh hơn nhiều, có lẽ vì Git Bash không còn tìm kiếm trên mạng cho các tệp thực thi. Tôi /etc/profilec:\Program Files (x86)\Git\etc\profile.


6
Tôi gặp vấn đề tương tự. Tôi đã thay đổi HOME="$(cd "$HOME" ; pwd)"đến HOME="$(cd "$USERPROFILE" ; pwd)", và bây giờ tất cả mọi thứ là tốc độ nhanh. Cảm ơn vì tiền hỗ trợ.
Jon Sagara

2
Tôi đã thành công khi sử dụng một biến thể của điều này: trong hồ sơ, buộc $ HOME thành $ USERPROFILE, xóa tham chiếu $ HOMEDRIVE. Ngoài ra trên các thuộc tính của phím tắt Git Bash, đặt "Bắt đầu" thành% USERPROFILE%
Aidan Ryan

11
Điều này đã khắc phục vấn đề của tôi trong hầu hết các phần, nhưng với Git ít nhất là vào ngày 2.7.2, tôi thấy rằng xuất trong /etc/profile.d/env.sh thay vì trực tiếp trong tệp / etc / profile.
Jared Siirila

15
Cảm ơn rất nhiều, cùng một vấn đề với tôi, tuy nhiên tôi đã sửa nó bằng cách tạo một biến môi trường (người dùng) có tên HOME, chỉ vào thư mục chính mong muốn của tôi. Nếu $ HOME không có mặt, rõ ràng git bash sẽ mặc định là% USERPROFILE%. Sau này, git bash nhanh như chớp.
JHH

6
Tùy chọn duy nhất hoạt động cho là một @JHH được mô tả trong các bình luận. Thêm một biến môi trường người dùng Windows được gọi là HOME và xác định thư mục chính mong muốn của bạn. (Bảng điều khiển -> Hệ thống -> Cài đặt hệ thống nâng cao -> Biến môi trường)
RenRen

45

Tôi tìm thấy ổ đĩa mạng là vấn đề hiệu suất. HOMEđã chỉ vào một chia sẻ mạng chậm. Tôi không thể ghi đè HOMEDRIVEnhưng đó không phải là vấn đề từ những gì tôi đã thấy.

Đặt biến môi trường bằng cách nhấp chuột phải vào máy tính của bạn trên màn hình nền -> thuộc tính -> Cài đặt hệ thống nâng cao -> Biến môi trường Thêm vào phần Biến người dùng

HOME=%USERPROFILE%

4
Điều này đã làm việc. Đối với tất cả mọi người có vấn đề về mạng thì đây là giải pháp thực sự. Bạn không cần phải chỉnh sửa bất kỳ tập tin cấu hình nào, chỉ cần tạo điểm HOME.
Carlos Calla

1
Xác định Env Người dùng Var HOME là% USERPROFILE% không hoạt động. Tôi đã xác định VAR HỆ THỐNG: HOME = C: \ Users \ myUserName
colin_froggatt

Đã làm cho tôi! Cảm ơn. Tôi đã làm một cái gì đó như @colin_froggatt nhưng thay vào đó là các biến Môi trường người dùng, đặt HOME = C: \ Users \ myUserName
Đ ..

22

Trong phần mở rộng cho câu trả lời của Chris Dolan, tôi đã sử dụng phương án sau PS1 cài đặt . Chỉ cần thêm đoạn mã vào ~ / .profile của bạn (trên 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\]
$ '

Điều này vẫn giữ được lợi ích của vỏ màu và hiển thị tên nhánh hiện tại (nếu trong kho Git), nhưng nó nhanh hơn đáng kể trên máy của tôi, từ ~ 0,75 giây đến 0,1 giây.

Điều này dựa trên bài viết trên blog này .


Câu trả lời chính xác. Tuy nhiên, tôi đã quyết định xác định lại '__git_ps1 ()' trong ~ / .bashrc của tôi và chỉ in chuỗi trống. Nó tăng tốc tất cả các lệnh Bash.
ajukraine

Tôi là người mới bắt đầu git, tôi muốn biết sự khác biệt giữa fast_git_ps1 này và bản gốc khá phức tạp __git_ps1 là gì. Tôi có ý tưởng rằng nó sẽ hoạt động trong hầu hết các trường hợp "bình thường", nhưng điều gì là bình thường và điều này sẽ thất bại ở đâu?
- Phục hồi Monica

Tôi không nhận thức được trường hợp nó sẽ thất bại. Tôi đã sử dụng __git_ps1 trước đây, nhưng nhận thấy các vấn đề về hiệu suất, vì vậy tôi đã mày mò tìm cách làm cho git làm ít việc hơn để trích xuất thông tin được hiển thị.
Wilbert

2
Bản gốc __git_ps1bao gồm thông tin trạng thái, không chỉ tên chi nhánh. Ví dụ: nếu bạn đang ở trạng thái tách rời, trong git dir, trong một repo trần, ở giữa hái anh đào hoặc nổi loạn hoặc sáp nhập ... Điều này sẽ nhanh hơn, nhưng có thể đôi khi bạn sẽ bỏ lỡ thông tin thêm này, đặc biệt là người mới bắt đầu Git.
Drew Noakes

22

Mặc dù vấn đề của bạn có thể dựa trên mạng, cá nhân tôi đã tăng tốc cục bộ git status cuộc gọi nội hạt gấp 10 lần (7+ giây xuống còn 700 ms) bằng cách thực hiện hai sửa đổi. Đây là trên kho lưu trữ 700 MB với 21.000 tệp và số lượng tệp nhị phân lớn quá mức.

Một là cho phép tải trước chỉ mục song song. Từ một dấu nhắc lệnh:

git config core.preloadindex true
Điều này thay đổi time git statustừ 7 giây thành 2,5 giây.

Cập nhật!

Sau đây là không còn cần thiết. Một bản vá đã sửa lỗi này kể từ mysysgit 1.9.4
https://github.com/msysgit/git/commit/64d63240762df22e92b287b145d75a0d68a66988
Tuy nhiên, bạn phải kích hoạt sửa lỗi bằng cách nhập
git config core.fscache true

Tôi cũng đã tắt UAC và trình điều khiển "luafv" (yêu cầu khởi động lại). Điều này vô hiệu hóa trình điều khiển trong Windows Vista, 7 và 8 để chuyển hướng các chương trình đang cố ghi vào vị trí hệ thống và thay vào đó chuyển hướng những truy cập đó vào thư mục người dùng.

Để xem cuộc thảo luận về cách điều này ảnh hưởng đến hiệu suất Git, hãy đọc tại đây: https://code.google.com.vn/p/msysgit/issues/detail?id=320

Để tắt trình điều khiển này, trong regedit, thay đổi phím "bắt đầu" HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/luafvthành 4 để tắt trình điều khiển. Sau đó, đặt UAC xuống cài đặt thấp nhất, "không bao giờ thông báo".

Nếu việc vô hiệu hóa trình điều khiển này khiến bạn cảnh giác (cần phải có), một giải pháp thay thế đang chạy trên một ổ đĩa (hoặc phân vùng) khác với phân vùng hệ thống của bạn. Rõ ràng trình điều khiển chỉ chạy trên truy cập tập tin trên phân vùng hệ thống. Tôi có một ổ cứng thứ hai và thấy kết quả giống hệt nhau khi chạy với sửa đổi đăng ký này trên ổ C của tôi như tôi làm mà không có nó trên ổ D.

Thay đổi này mất time git statustừ 2,5 giây xuống còn 0,7 giây.

Bạn cũng có thể muốn theo dõi https://github.com/msysgit/git/pull/94https://github.com/git/git/commit/d637d1b9a8fb765a8542e69bd2e04b3e229f663b để xem các vấn đề đang diễn ra trong Windows .


10
điều này chỉ đưa ra ánh sáng, một lần nữa, các giải pháp ngu ngốc và ít ỏi của Microsoft, cho các vấn đề được giải quyết trong Unix một cách đơn giản và thanh lịch vào năm 1968. Bao nhiêu nỗ lực sản xuất, thời gian và tiền bạc đã bị lãng phí bởi sự phình to / thiếu linh hoạt / sự táo bạo trên toàn thế giới?
v.oddou

20
Tôi nhớ sử dụng git trở lại vào năm 68, nó thật tuyệt vời.
Charlie Brown

2
Haha một năm trước khi Linus xuất hiện xung quanh
@CharlieBrown

1
được bật theo mặc định trong git 2.1 stackoverflow.com/a/24045966/4854931
Alex78191

18

Dường như gỡ cài đặt hoàn toàn Git, khởi động lại (cách chữa Windows cổ điển) và cài đặt lại Git là cách chữa. Tôi cũng xóa sạch tất cả các tệp cấu hình bash còn sót lại (chúng được tạo thủ công). Mọi thứ lại nhanh chóng.

Nếu vì lý do nào đó, việc cài đặt lại là không thể (hoặc mong muốn), thì tôi chắc chắn sẽ thử thay đổi biến PS1 được tham chiếu trong câu trả lời của Chris Dolan ; nó dẫn đến sự tăng tốc đáng kể trong các hoạt động nhất định.


3
Cài đặt lại mà không khởi động lại không hoạt động, gỡ cài đặt-restart-install hoạt động. Cảm ơn! Dù vậy, thật tuyệt khi biết tại sao và làm thế nào bash lại chậm như vậy.
Gauthier

Cài đặt lại với khởi động lại ở giữa không tạo ra sự khác biệt đối với tôi.
RyanW

@RyanW Tôi e rằng tôi không thể giúp đỡ ngoài giải pháp trên có hiệu quả với tôi, nhưng vì vấn đề này dường như chưa được khắc phục vĩnh viễn, bạn có thể muốn liên lạc với những người bảo trì của msysgit và xem họ có thể tìm ra không ra nguyên nhân của vấn đề này
Gemini14

3
Những tập tin cấu hình bash nào bạn đã xóa chính xác?
Scott

3
Đây không phải là giải pháp cho câu trả lời. Khi bạn gỡ cài đặt và cài đặt lại, một số tệp cấu hình có thể đã thay đổi, những thay đổi đó là câu trả lời. Nếu bạn chỉ nói rằng cài đặt lại là giải pháp thì đó là sai. Những người khác có thể gỡ cài đặt và cài đặt lại và cấu hình các tệp có thể giống nhau và đó là lý do tại sao nó không hoạt động cho tất cả mọi người.
Carlos Calla

10

Tôi đã giải quyết vấn đề Git chậm của mình trên Windows 7 x64 bằng cách bắt đầu cmd.exe với "Chạy với tư cách quản trị viên".


10
Câu hỏi nói về git bash.
manojlds

2
Bạn có thể chạy git bash với tư cách quản trị viên; có vẻ như chỉ ra một vấn đề UAC
krosenvold

3
Ồ, cải thiện tốc độ rất lớn khi chạy git bash với tư cách quản trị viên
Evil E

Tôi không chắc tại sao câu trả lời này chỉ có 6 phiếu bầu. Tôi nghĩ rằng câu trả lời này đã giải quyết vấn đề hoàn toàn. Có một sự cải thiện tốc độ rất lớn.
vinoth10

2
@ vinoth10 Vâng, có vấn đề với, bạn biết đấy, đang chạy với tư cách quản trị viên. Mà vì nhiều lý do là một ý tưởng tồi, và đối với nhiều trường hợp sử dụng của công ty không phải là một lựa chọn nào cả. Giải quyết vấn đề hiệu suất bằng cách nâng cao người dùng là một giải pháp kinh khủng.
JHH


6

Như đã lưu ý trong câu trả lời của Chris Dolan và Wilbert, PS1 làm bạn chậm lại .

Thay vì vô hiệu hóa hoàn toàn (như được đề xuất bởi Dolan) hoặc sử dụng tập lệnh do Wilbert cung cấp, tôi sử dụng "PS1 câm" nhanh hơn nhiều.

Nó sử dụng (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\]# '

Trên Cygwin của tôi, câu hỏi này nhanh hơn câu trả lời "fast_Git_PS1" của Wilbert - 200 ms so với 400 ms, vì vậy nó sẽ loại bỏ một chút sự chậm chạp nhanh chóng của bạn.

Nó không phức tạp như __git_ps1- ví dụ như nó không thay đổi lời nhắc khi bạn cd vào thư mục .git, v.v. nhưng đối với việc sử dụng hàng ngày thông thường, nó đủ tốt và nhanh chóng.

Điều này đã được thử nghiệm trên Git 1.7.9 (Cygwin, nhưng nó sẽ hoạt động trên mọi nền tảng).


Bạn cũng có thể sử dụng --shorttùy chọn để không inrefs/heads/
Friederbluemle

@friederbluemle, bạn đang sử dụng phiên bản git nào? Của tôi (1.7.9) không cung cấp --shortcho symbolic-reflệnh.
sinelaw

Đã cập nhật để không in lỗi khi ở bên ngoài bất kỳ repo git nào và để hoạt động cho các ĐẦU tách rời
sinelaw

Tôi đang sử dụng 1.8.4 (msysgit)
Friederbluemle

6

Bạn cũng có thể tăng hiệu suất rất cao 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 là ngay lập tứ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 nhau trong cài đặt của bạn: https://github.com/msysgit/msysgit/wiki/Diagnose-why-Git-is-so- chậm


5

Tôi đã có cùng một vấn đề, trong cả Git Bash và Git GUI. Cả hai chương trình đều sử dụng để chạy tốt, nhưng sau đó chúng ngẫu nhiên giảm tốc độ để thu thập dữ liệu và tôi không thể hiểu tại sao.

Hóa ra, đó là Avast. Avast đã gây ra những điều kỳ lạ xảy ra với các chương trình khác nhau (bao gồm cả các chương trình tôi viết), vì vậy tôi đã vô hiệu hóa nó trong một giây và chắc chắn, Bash bây giờ chạy nhanh như trên Linux. Tôi vừa thêm thư mục tệp chương trình Git ( C:\Program Files\Git) vào danh sách loại trừ Avast và bây giờ nó chạy nhanh như trên Linux.

Và vâng, tôi nhận ra phần mềm chống vi-rút không phải là vấn đề trong bài viết gốc, nhưng tôi sẽ chỉ đặt phần mềm này ở đây trong trường hợp nó hữu ích với ai đó.


4

Ngoài những câu trả lời khác, tôi đã tăng tốc các dự án với nhiều mô hình con bằng cách sử dụng tìm nạp mô hình con song song (kể từ Git 2.8 vào đầu năm 2016).

Điều này có thể được thực hiện git fetch --recurse-submodules -j8và thiết lập với git config --global submodule.fetchJobs 8, hoặc tuy nhiên nhiều lõi bạn có / muốn sử dụng.


2

Nếu bạn sử dụng Git từ cmd, hãy thử chạy nó từ Git Bash. Trong cmd, git.exe thực sự là một trình bao bọc thiết lập môi trường chính xác mỗi khi bạn khởi động nó và chỉ sau đó khởi chạy git.exe thực. Có thể mất gấp đôi thời gian so với yêu cầu để làm những gì bạn muốn. Và Git Bash chỉ thiết lập môi trường khi nó bắt đầu.



2

Câu trả lời kết hợp:

  1. Wilbert's - thông tin cần bao gồm trong PS1
  2. sinelaw - (<branch_name>)hoặc(<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}\] $ '

Kết quả:

frolowr @ RWAMW36650 / c / dự án / elm-math-children (thạc sĩ) $


đã không làm cho nó nhanh hơn
keinabel

@keinabel Tại thời điểm này tôi sẽ xem xét core.commitGraph=truetừ blogs.msdn.microsoft.com/devops/2018/06/25/... và khác từ blogs.msdn.microsoft.com/devops/tag/git
rofrol

2

Tôi đã gặp vấn đề tương tự khi chạy Git cho Windows (msysgit) trên Windows 7 x64 vì tài khoản người dùng bị hạn chế trong một thời gian khá lâu.

Từ những gì tôi đã đọc ở đây và những nơi khác, chủ đề chung dường như là thiếu các đặc quyền quản trị và / hoặc UAC. Vì UAC tắt trên hệ thống của tôi, nên lờ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 vấn đề của mình bằng cách cài đặt phiên bản Git 1.8 di động 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 tệp ZIP để trình cài đặt zip hoạt động. Tôi cũng phải tự thêm 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 Program Files (x86)thư mục mà tôi không có quyền đối với người dùng bị hạn chế, nhưng dường như nó không gặp phải vấn đề tương tự.

Tôi cho rằng điều này là thực tế rằng phiên bản di động bảo thủ hơn một chút trong đó nó ghi / xóa các tệp, có lẽ là trường hợp hoặc nâng cấp từ 1.7 lên 1.8. Tôi sẽ không cố gắng xác định xem đâu là lý do, đủ để nói rằng nó hoạt động tốt hơn nhiều, kể cả Bash.


1
Tắt UAC dường như giải quyết phần "lớn" của vấn đề đối với chúng tôi (độ trễ nhiều giây). Bản hack ps1 đã làm phần còn lại.
krosenvold

Tôi cũng sử dụng SSD, RAM 32 GB và i7 lõi ​​tứ và không có câu trả lời nào khác được trợ giúp, vô hiệu hóa các lệnh UAC, khởi động lại và git là
NGAY LẬP TỨC

2

Trong trường hợp của tôi, nó thực sự là chương trình diệt virus Avast dẫn đến Git Bash và thậm chí PowerShell trở nên rất chậm.

Lần đầu tiên tôi thử vô hiệu hóa Avast trong 10 phút để xem nó có cải thiện tốc độ không và nó đã làm được. Sau đó, tôi đã thêm toàn bộ thư mục cài đặt Git Bash như một ngoại lệ trong Avast, cho Đọc, Viết và Thực thi. Trong trường hợp của tôi đó là C:\Program Files\Git\*.


Tôi muốn xác nhận lời khuyên này. Loại trừ git từ Avast thực sự làm cho mọi thứ nhanh hơn. Tôi thấy tình trạng git mà không phải chờ đợi nữa. Giành chiến thắng 7 x64
fajarhac

Antivirus chỉ can thiệp.
Alex78191

1
Cảm ơn, đó chắc chắn là một chiến thắng nhanh chóng! Đã tắt avast trong 10 phút, nhận thấy sự thay đổi tức thì trong hiệu suất git (tức là trở về thời gian thực hiện bình thường).
Marcello Romani

Giải pháp này đã làm việc cho tôi. McAfee + Windows 10 Ent.
FractalSpace

1

Không có gì ở trên có thể giúp tôi. Trong kịch bản của tôi, vấn đề đã thể hiện như thế này:

  • Bất kỳ lllệnh nào đều chậm (mất khoảng 3 giây để thực thi)
  • Bất kỳ lllệnh tiếp theo nào được thực thi ngay lập tức, nhưng chỉ trong vòng 45 giây từ lệnh ls trước đó .

Khi nói đến việc gỡ lỗi với Process Monitor , người ta thấy rằng trước mỗi lệnh đều có yêu cầu DNS.

Vì vậy, ngay sau khi tôi vô hiệu hóa tường lửa của mình (Comodo trong trường hợp của tôi) và để lệnh thực thi thì vấn đề đã biến mất. Và nó không quay trở lại khi tường lửa được bật lại. Với cơ hội sớm nhất, tôi sẽ cập nhật phản hồi này với nhiều chi tiết hơn về quy trình đang thực hiện yêu cầu DNS chặn và mục tiêu là gì.

BR, G


lllà bí danh cho log? Có vẻ kỳ lạ là sẽ có yêu cầu DNS cho điều đó.
Michael - Clay Shirky ở đâu

1
lllà một bí danh cho ls -l. Và vẫn còn lạ khi kích hoạt yêu cầu DNS ... Trong khi đó, tôi vẫn đang chờ vấn đề này xuất hiện trở lại để thêm chi tiết vào câu trả lời.
George

1

Trong trường hợp của tôi, phím tắt Git Bash đã được đặt thành Start in:%HOMEDRIVE%%HOMEPATH%(bạn có thể kiểm tra điều này bằng cách nhấp chuột phải vào Git Bash và chọn thuộc tính). Đây là ổ đĩa mạng.

Giải pháp là làm cho nó trỏ đến %HOME%. Nếu bạn không có nó, bạn có thể thiết lập nó trong các biến môi trường và bây giờ Git Bash sẽ nhanh như chớp.


Tôi nghĩ rằng câu trả lời này nên có nhiều phiếu hơn. Tôi đến đây để đăng đề nghị tương tự, nhưng thấy bạn đã đánh bại tôi với nó lol.
Jon

0

Tôi cũng gặp vấn đề với git PS1 chậm chạp, mặc dù trong một thời gian dài tôi đã nghĩ rằng đó là một vấn đề kích thước cơ sở dữ liệu (kho lưu trữ lớn) và đã thử nhiều git gcthủ thuật khác nhau , và đang tìm kiếm những lý do khác, giống như bạn. Tuy nhiên, trong trường hợp của tôi, vấn đề là dòng này:

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
}

Làm git statuscho mọi dòng trạng thái dòng lệnh là chậm. Ôi. Đó là thứ tôi viết bằng tay. Tôi thấy đó là một vấn đề khi tôi thử

export PS1='$'

như được đề cập trong một câu trả lời ở đây. Dòng lệnh nhanh như chớp.

Bây giờ tôi đang sử dụng cái này:

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

Từ dòng PS1 Stack Overflow với nhánh và màu hiện tại của git và nó hoạt động tốt. Một lần nữa có một dòng lệnh Git nhanh.


Vì vậy, vấn đề của bạn là do một kịch bản bạn đã viết? Có lẽ kịch bản đó không có khả năng là nguyên nhân, đối với những người dùng khác tìm kiếm cùng một vấn đề ...
Jolta 17/03/2016

Hãy xem câu hỏi của OP - anh ấy đã đề cập đến rất nhiều điều anh ấy đã kiểm tra, và vẫn không phải vậy. Tôi cũng vậy. Vì vậy, ở đây tôi đã thêm một điều cần kiểm tra khi không có gì giúp được. Và đó không phải là kịch bản cụ thể mà tôi đã viết rất quan trọng, mà là một khái niệm - hãy nhìn vào PS1 của bạn.
Koshmaar

0

Một đồng nghiệp của tôi đã gặp rắc rối với Git trên Windows (7) git status checkoutaddnhanh nhẹn, nhưng git commitmất nhiều thời gian.

Chúng tôi vẫn đang cố gắng tìm ra nguyên nhân gốc rễ của việc này, nhưng việc sao chép kho lưu trữ vào một thư mục mới đã khắc phục vấn đề của anh ấy.


0

Như nhiều người đã nói, điều này là do stashtập lệnh shell trên Windows, nhưng kể từ Git 2.18.0, trình cài đặt Windows có một tùy chọn cho tính năng thử nghiệm của phiên bản stash tích hợp (~ 90%) nhanh hơn nhiều - https: / /github.com/git-for-windows/build-extra/pull/203 .


Điều đó giúp với stash, nhưng của bạn là bài viết đầu tiên đề cập stashcụ thể. Nó có ảnh hưởng đến các hoạt động Git khác không?
Michael - Clay Shirky

Theo tôi hiểu, không. Tthere là 2 tính năng thử nghiệm trong bản xem trước cho phép có stashvà / hoặc rebasesử dụng tệp thực thi riêng để có hiệu suất tốt hơn nhưng với bất kỳ thứ gì trong bản xem trước luôn có một khả năng nhỏ là có thể có tác dụng phụ nhỏ.
bergmeister

1
PS Tính năng này không được xem trước trong phiên bản 2.19.1, do đó bạn không nhận được tùy chọn nào nữa
bergmeister
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.