2011-01-21 32 views
8

Bạn có thể giới hạn tìm kiếm git log của bạn vào một tập tin như vậy:Với git, làm cách nào để tìm kiếm mẫu tệp bằng `git log` thay vì đường dẫn tệp?

git log [branch] -- foo.c 

Nhưng làm thế nào bạn có thể hạn chế việc tìm kiếm một mô hình tập tin thay vì một đường dẫn đầy đủ?

  • Hãy xem xét rằng bạn có thể chạy git log trên một chi nhánh, nơi bao mở rộng * sẽ không hoạt động, vì vậy bạn không thể phụ thuộc vào vỏ để làm tập mô hình phù hợp.
  • Ngoài ra, bạn không thể chỉ định chi nhánh với git ls-files.
+0

Tôi bắt đầu nghĩ rằng tính năng này không tồn tại như một tùy chọn dòng lệnh đơn giản ... – Neil

+0

có thể điều này đã được thêm vào một phiên bản sau của git, nhưng điều này làm việc cho tôi: 'git log -" */foo.c "', bao gồm đặc tả chi nhánh. – michael

Trả lời

9

Tôi có xu hướng làm những việc như thế này:

git ls-files [--with-tree=<branch>] [path] | grep '<pattern>' | xargs git log [branch] 
+0

Bạn không thể chỉ định một 'chi nhánh' với' git ls-files' ít nhất là git 1.7.3, vì vậy bạn phải kiểm tra mỗi nhánh. – Neil

+0

@Neil: Tệ của tôi; có bạn đi. – Cascabel

+1

P.S. Bạn cũng có thể sử dụng 'ls-tree -r --name-only'. – Cascabel

8

Hoặc chỉ cần thả hàng đầu ., ví dụ: git log -- *foo.c, hoặc thậm chí git log -- ./*foo.c

+1

Nếu bạn muốn kết hợp regex phức tạp hơn, hãy sử dụng perl và đặt đầu ra vào git log - –

+1

Điều này không chính xác. Nó sẽ chỉ tìm các cam kết phù hợp với mẫu tệp nếu tệp tồn tại trên hệ thống tệp. * Sẽ được mở rộng bởi vỏ nếu tệp tồn tại. Vì vậy, nếu bạn làm 'git log some_other_branch - * foo.c' nó sẽ không tìm thấy những gì bạn đang tìm kiếm trong mọi trường hợp. – Neil

+3

Tôi không hiểu phiếu giảm giá ở đây (hoặc ý kiến ​​"này không chính xác"). Chỉ cần trích dẫn mẫu để vỏ không mong đợi ký tự đại diện (trừ khi tôi hiểu nhầm câu hỏi.) Và không cần thiết (cũng không có đề cập đến) regex đầy đủ cho phù hợp với mẫu tệp. Chỉ cần sử dụng: 'git log --name-only -" */* foo * "' (hoặc 'git log {branch} ...' etc) và nó sẽ tìm tất cả các tệp phù hợp với mẫu. – michael

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