2013-09-24 26 views
12

Tôi có một kho lưu trữ với nhiều tệp nguồn tự động tôi đã đánh dấu là "nhị phân" trong .gitattributes (chúng được đăng ký vì không phải ai cũng có quyền truy cập vào công cụ máy phát). Ngoài ra, repo có nhiều tệp nguồn-ish trong các thư mục bị bỏ qua (một lần nữa, được tạo ra như là một phần của quá trình xây dựng) và một số tệp nhị phân thực (ví dụ: các tệp tài nguyên nhỏ như biểu tượng).Làm thế nào để liệt kê tất cả các tập tin văn bản (không nhị phân) trong kho git?

Tôi muốn tìm tất cả các tệp không được tạo tự động và không bị bỏ qua trong repo. Tôi nghĩ rằng tôi chỉ làm điều này với find và một loạt các loại trừ, nhưng bây giờ tôi có một tuyên bố kinh khủng find với một tá điều khoản (và nó vẫn không hoàn toàn làm công việc). git ls-files hoạt động nhưng cho tôi thấy tất cả các tệp nhị phân không có sự phân biệt, mà tôi phải lọc ra.

Vì vậy, tôi tự hỏi: có một lệnh đơn giản mà tôi có thể chạy liệt kê mọi tệp được kiểm tra vào repo và git nào coi tệp "văn bản" không?

Trả lời

12
git grep --cached -Il '' 

trình vì:

  • -I: không phù hợp với mô hình trong tập tin nhị phân
  • -l: chỉ hiển thị tên tập tin phù hợp, không phù hợp với dòng
  • '': chuỗi rỗng trận đấu bất kỳ tệp nào

Hoặc bạn có thể sử dụng How to determine if Git handles a file as binary or as text? trong vòng lặp for với git ls-files.

Tìm tất cả các tập tin nhị phân thay vì: Find all binary files in git HEAD

SỰ TỪ BỎ: Cacovsky nói nội dung tương tự, tôi đã cố gắng chỉnh sửa để nâng cao định dạng và giải thích các tùy chọn, chỉnh sửa đã được đảo ngược, vì vậy ở đây đi :-)

+0

Và cho đường ống vào 'xargs -0' có tùy chọn' -z'. – raphinesse

0

Các phương pháp tiêu chuẩn niêm yết file không bỏ qua là:

git ls-files --exclude-standard --cached 

Nhưng, như bạn thấy, nó sẽ liệt kê tất cả file phiên bản.

Một cách giải quyết có thể là xác định trong một tệp riêng biệt "exclude_binaries" một exclusion pattern để khớp với tất cả các tệp nhị phân mà bạn biết.

git ls-files --exclude-standard --cached \ 
--exclude-from=/path/to/`exclude_binaries` 

Đó sẽ là một ít phức tạp find, nhưng nó không cung cấp một cách hoàn toàn tự động liệt kê các file không nhị phân: bạn vẫn phải xác định và liệt kê chúng trong một file mẫu riêng biệt.

2

Một minh hack để đạt được điều này: liệt kê tất cả các file không nhị phân có chứa kí tự xuống dòng

$ git grep --cached -I -l -e $'\r' 

Đối với trường hợp của tôi, một chuỗi rỗng hoạt động tốt hơn:

$ git grep --cached -I -l -e $'' 

lấy nó từ git list binary and/or non-binary files?.

+1

Không cần cho '$' trong '$ ''', '''' là dễ di chuyển hơn. –