2015-01-26 22 views
18

Tôi đang sử dụng git để kiểm soát nguồn trên một kho lưu trữ. Gần đây nó đã bắt đầu cảnh báo tôi về phải mất bao lâu để liệt kê các file untracked khi sử dụng git status:Git liệt kê các tập tin không tồn tại không tồn tại từ từ

$ git status 
On branch my_branch 
Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

    modified: My_Project/my_source.c 


It took 3.24 seconds to enumerate untracked files. 'status -uno' 
may speed it up, but you have to be careful not to forget to add 
new files yourself (see 'git help status'). 
no changes added to commit (use "git add" and/or "git commit -a") 

Tuy nhiên, không có file untracked trong kho lưu trữ này - Tôi đã kiểm tra với git status -uall. Một số thông tin có thể có liên quan khác:

  • Tôi đã lưu ý rằng cảnh báo này chỉ xuất hiện khi git status thực sự mất vài giây để chạy.
  • Kho lưu trữ của tôi là 130,6 MB vào lúc này.
  • Sản phẩm xây dựng của tôi là tất cả ngoài cây.

Tại sao git mất quá nhiều thời gian để liệt kê các tệp không được theo dõi không tồn tại?


Dưới đây là một số câu hỏi khác liên quan:

+5

"Tệp không được theo dõi" bao gồm các tệp bị bỏ qua bởi '.gitignore' và bạn bè. Kích thước của kho lưu trữ của bạn không thực sự quan trọng, vì 'git status' chỉ' lstat() 's các tệp của bạn. Điều quan trọng là có bao nhiêu tập tin có, làm thế nào sâu lồng nhau cây thư mục của bạn và hệ thống tập tin của bạn nhanh như thế nào. –

+0

Nếu bạn có nhiều tạo phẩm xây dựng trong cây, bạn có thể cân nhắc sử dụng các bản dựng ngoài cây để tăng tốc độ. –

+0

@SvenMarnach Thú vị. Các bản dựng của tôi đã lỗi thời - tôi đã chỉnh sửa câu hỏi của mình để phản ánh điều này. Dự án của tôi là lớn, nhưng không điên - đại đa số các nguồn là một cấp độ sâu, và có 334 tệp như vậy ở lần cuối cùng. – ravron

Trả lời

3

Just for làm rõ giải pháp cho bởi tác giả trong các bình luận mới nhất:

Tôi đã thay thế ổ đĩa của mình và vì không gặp sự cố này.

Vấn đề không phải trong chính nó mà thay vào đó vấn đề nằm trong phần cứng máy tính.
Khi HD đã được thay thế - sự cố được giải quyết.

+1

Cảm ơn, ngớ ngẩn tôi vì không thực sự trả lời. – ravron

2

Trước tiên, tôi muốn ghi nhận những nhận xét của Sven Marnach ở trên về cơ bản đã cho tôi giải pháp này.

Sự cố: Tôi cũng gặp sự cố này, nhưng (các) HD của tôi là/không sao. Mất 3-5 giây để thực hiện "trạng thái git" trên ổ SSD và 4-8 giây trên ổ đĩa từ. Nó nhanh hơn rất nhiều sau khi tôi đã thực hiện nó một vài lần. Tôi cũng thấy lỗi này về việc mất quá nhiều thời gian để liệt kê các tệp không được theo dõi nhưng tôi không có thay đổi nào đối với cam kết.

Giải pháp nhanh: Xóa mọi tệp đang bị ẩn bởi tệp .gitignore của bạn.

Giải pháp tốt hơn: Dừng xây dựng trong cùng một thư mục có trong kiểm soát nguồn.

Lý do: Git vẫn phải đi qua tất cả các tệp không được theo dõi, xem có bất kỳ tệp mới nào không và sau đó tham chiếu chéo chúng với các mục nhập trong .gitignore. Lỗi này không có nghĩa là bạn có các tệp cần được đăng ký, thay vào đó phải mất một khoảng thời gian dài để tìm ra liệu có cần phải đăng ký một tệp nào đó hay không.

Thanh toán sạch sẽ ở đó không có tệp nào bị ẩn bởi git bỏ qua và ổ SSD, chạy "trạng thái git" mất 0,8 giây.

Lưu ý cuối cùng: Đây là một dự án thực sự cũ và chúng tôi có tệp .gitignore thực sự lớn. Tôi nghi ngờ rằng giảm 100 mục xuống đến một thư mục duy nhất sẽ giúp quá, nhưng tiếc là chúng tôi có một vài tập tin trong mỗi một trong các thư mục đầu ra được kiểm tra trong.

2

giải pháp của tôi là loại bỏ đường dẫn tập tin đầy đủ trong .gitignorebỏ qua thư mục thay vì nếu có thể.

Chỉ cần lưu ý gitignore của tôi dài 15000 dòng.

Các vấn đề liên quan