2011-08-31 21 views
6

Nếu tôi chạy lệnh git grep n lần, tôi gặp lỗi khoảng 0.8 * n lần.Có phải git grep buggy - vô hiệu hóa tìm kiếm song song không?

$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null 
fatal: unable to read tree (bc9e3369c6d6f027075e794fa11db02af3f8fb38) 
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null 
fatal: unable to read tree (473a47dd3895b1db09baf4cf9463f4cbd224d5dd) 
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null 
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null 
fatal: unable to read tree (b917adbfffd1928c8f6ac0f746a4fdfcf2088029) 
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null 
fatal: unable to read tree (473a47dd3895b1db09baf4cf9463f4cbd224d5dd) 

Những gì tôi đã cố gắng

  1. chạy như superuser để loại trừ bất kỳ vấn đề với bảo vệ tập tin
  2. git fsck báo cáo không có gì xấu chỉ là một vài lủng lẳng đối tượng
  3. nhân bản repo, không có lỗi về nhân bản, nhưng git grep cho thấy cùng một hành vi trong bản sao một lần nữa.
  4. cái nhìn tại một số các SHA1s báo cáo sử dụng git cat-file, dường như tất cả tiền phạt
  5. google một chút

Google thú vị nhất đạt được:

http://www.spinics.net/lists/git/msg164520.html

Thông điệp chỉ 3 giờ. Vâng, nếu họ có điều kiện chủng tộc trong git grep, điều đó có thể giải thích mọi thứ. Vì vậy, họ làm tìm kiếm song song trên một số lõi? (Tôi có 4 ở đây.) Làm thế nào tôi có thể vô hiệu hóa điều đó, ngắn khởi động toàn bộ máy chỉ với 1 lõi?

$ git --version 
git version 1.7.3.4 

(Đó là những gì đi kèm với OpenSUSE 11.4)

+0

(Hoặc biên dịch bản cập nhật được đề xuất hoặc biên dịch lại Git với NO_PTHREADS được xác định.) –

+0

Cảm ơn, NO_PTHREADS có vẻ hữu ích. Không chắc chắn khi các bản vá trên danh sách gửi thư sẽ xuất hiện trong repo của họ (nếu có). Hiện tại tôi cần tập trung một chút vào công việc của mình và không có ý định chơi bản vá cho các công cụ. –

+0

Dường như bản phát hành sắp tới 1.7.8 sẽ bao gồm bản vá. –

Trả lời

0

Nếu bạn có thể, biên soạn git với các bản vá đề xuất dường như khắc phục vấn đề chủng tộc. Có vẻ như không có cách nào để vô hiệu hoá sự song song.

+0

Song song có thể được vô hiệu hóa với -DNO_PTHREADS trong quá trình biên dịch như đã đề cập bởi Josh Lee. Tôi đã làm nó bằng cách chỉ biên dịch gói nguồn từ bản phân phối của tôi (git-1.7.3.4) với cờ này được thêm vào. Tôi không có thời gian để thử miếng vá. –

1

Nó trông giống như bất kỳ các điều kiện sau sẽ vô hiệu hóa đề trong git-grep:

  • -O được đưa ra để mở các tập tin tương ứng trong một máy nhắn tin.
  • NO_PTHREADS được xác định tại thời gian biên dịch.
  • -p được cung cấp để hiển thị tên hàm làm ngữ cảnh.

Hy vọng rằng điều cuối cùng sẽ không phô trương với quy trình làm việc của bạn.

+1

Cảm ơn câu trả lời. Tùy chọn 1 không hoạt động chút nào, -O chỉ được phép tìm kiếm vùng làm việc. Tùy chọn 2 hoạt động. Tùy chọn 3 hoạt động, nhưng nó có một chút xâm nhập (đầu ra bổ sung, rất khó để diễn giải trong trường hợp của tôi) –

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