2013-06-01 40 views
12

Tôi đang làm việc trên một dự án có hệ thống kiểm soát phiên bản là SVN và tôi muốn sử dụng git. Tôi đã làm một bản sao git svn nhưng git status hoạt động cực kỳ chậm (khoảng 8 phút). Kho lưu trữ có khoảng 63000 tệp và hầu hết trong số đó là các thư viện bị bỏ qua bởi git. Điều này có bình thường không? Tôi đã thực hiện git prune && git gc để thực hiện dọn dẹp các đối tượng không thể truy cập và thu thập rác. Tôi cũng đã làm một git repack -Adf nhưng điều này làm cho mọi thứ còn tồi tệ hơn. Nó mất nhiều thời gian hơn (hơn 20 phút).trạng thái git mất quá nhiều thời gian

Tôi đang làm gì sai? Đây là một dự án studio trực quan và tôi cho rằng tệp .gitignore không chứa nội dung phù hợp. Có thể tìm ra chính xác những tập tin nào được tạo ra từ một xưởng xây dựng trực quan và những phiên bản nào phải được phiên bản?

Nếu tệp .gitignore không phải là vấn đề, làm cách nào để tôi có thể làm cho tốc độ của mình nhanh hơn một chút với 65000 tệp (khoảng 10 GB)?

+1

Tôi cũng thấy rằng git chậm trong một số môi trường cửa sổ. Bạn đã xem http://stackoverflow.com/questions/4485059/git-bash-is-extremely-slow-in-windows-7-x64?lq=1 và http://stackoverflow.com/questions/2835775/ msysgit-bash-là-horrendously-slow-in-windows-7? lq = 1? –

+0

Trạng thái 'git status' hiển thị khi nó hoàn thành? –

+0

@me_and nó hiển thị thông báo "không có gì để cam kết" bình thường, nó chỉ mất quá lâu –

Trả lời

5

Đối với một kho lưu trữ có kích thước đó, git status và các lệnh được liên kết có thể rất chậm. Git hoạt động tốt hơn nhiều khi các dự án bị tách rời và tách ra, trong khi Subversion có xu hướng khuyến khích sử dụng các kho lưu trữ khổng lồ chứa nhiều dự án, vì vậy vấn đề này không phải là hiếm khi sử dụng Git-SVN.

Tuy nhiên, đang có một số giải pháp khác nhau mà bạn có thể sử dụng để tăng tốc:

  • Nếu bạn chưa, nâng cấp lên sử dụng một đĩa trạng thái rắn chứ không phải là một đĩa từ. Sự thay đổi duy nhất này tạo ra sự khác biệt lớn về tốc độ của Git khi tôi đang làm việc trên một kho lưu trữ tương tự

  • Xem phần Cấu hình của git help svn. Điều đó mô tả việc thiết lập Git-SVN để sử dụng các thư mục con theo dõi trong kho lưu trữ Subversion (ví dụ: trunk/project-a, branches/*/project-a, tags/*/project-a,…) chứ không phải toàn bộ kho lưu trữ. Nếu điều này có ý nghĩa đối với kho lưu trữ của bạn, điều đó có nghĩa là bạn có thể có nhiều lần kiểm tra nhỏ hơn và chạy nhanh hơn rất nhiều git status.

  • Xem phần Thanh toán thưa thớt của git help read-tree. Điều đó sẽ nói chuyện với bạn thông qua việc thiết lập Git để sử dụng một bản sao làm việc thưa thớt, tương tự như kiểm tra thưa thớt của Subversion. Một lần nữa, điều này có nghĩa rằng sẽ có ít tệp tin theo dõi của Git trong bản sao làm việc của bạn, và do đó việc kiểm tra tất cả chúng sẽ lại nhanh hơn.

  • Cân nhắc đặt cờ "giả định không thay đổi" trên các phần lớn bản sao làm việc của bạn. Điều này sẽ cho Git không bận tâm kiểm tra xem các tập tin đã thay đổi chưa. Có hai cách để làm điều này:

    1. Để đặt cờ cho thư mục cụ thể, chạy giống như sau:

      find <folder-name>... -type f -exec git update-index --assume-unchanged {} + 
      
    2. Để đặt cờ cho toàn bộ kho lưu trữ (lưu ý này sẽ mất không bị giam thay đổi):

      git config core.ignorestat true 
      git reset --hard HEAD 
      

    Hãy nhìn vào các --assume-unchanged tùy chọn trong git help update-index và phần config.ignoreStat trong git help config để biết thêm thông tin về cách thức hoạt động của chúng.

    Sử dụng này sẽ có nghĩa là bạn cần phải xác định đường dẫn đến lệnh như git diffgit add một cách rõ ràng, tức là các lệnh giống như một trần git diff, git commit -a & c sẽ không hoạt động.

  • Thay đổi hệ điều hành và/hoặc hệ thống tệp của bạn. Theo các trang của người dùng Git (giống như trong viên đạn trước), Windows lstat chậm, cũng như hệ thống tệp CIFS. Tôi nghi ngờ lý tưởng là một cái gì đó giống như ext3 hoặc ext4 trên Linux hoặc một số khác * nix.

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