2011-06-27 30 views
24

Tôi muốn tìm các cam kết trong cơ sở mã của tôi để thêm tệp video để loại bỏ chúng. Có cách nào để tìm những tệp này trong git không?Tìm các cam kết sửa đổi tên tệp khớp với mẫu trong kho GIT

Ví dụ: giả sử tất cả các video có tên tệp kết thúc bằng đuôi .wmv; Tôi muốn tìm tất cả các cam kết giới thiệu các tập tin này và loại bỏ chúng với một sửa chữa hoặc một cái gì đó.

Bất kỳ ý tưởng nào?

Trả lời

30

bạn có thể sử dụng git log với một pathspec:

git log --all -- '*.wmv' 

này sẽ giúp bạn có được tất cả các cam kết mà làm thay đổi .wmv tập tin. có, điều này sẽ đi sâu vào thư mục con quá (nhưng bạn phải bao quanh pathspec của bạn với dấu nháy đơn, vì vậy nó sẽ được thông qua như là để git).

nếu bạn chỉ quan tâm đến cam kết băm (kịch bản, vv) sử dụng git rev-list máy móc trực tiếp:

git rev-list --all -- '*.wmv' 
+1

Điều đó dường như không hoạt động chút nào. Tôi không có gì sau hai lệnh này và chờ đợi lâu. – Bastes

+0

@bastes: sau đó có các tập tin w.không có trong cây của bạn… @ câu trả lời của adl là tốt hơn mặc dù – knittl

+0

Không có tác dụng này không hoạt động. Tôi thử git log --all - '\ *. Java' và không nhận được gì trong khi tìm. -name '\ *. java' liệt kê tất cả các tệp. –

5

Nếu bạn muốn loại bỏ những tập tin từ tất cả các cam kết của bạn, hãy xem xét viết lại toàn bộ lịch sử với filter-branch chỉ huy. Ví dụ:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch -r *.wml' HEAD 
+0

Vâng đó là khá nhiều những gì tôi dự định làm thực sự. Cảm ơn lệnh. – Bastes

0

Yup, như đã đề cập, tôi nghĩ rằng thinko là loại bỏ các cam kết mà giới thiệu họ sẽ không để loại bỏ các đốm màu

Xem http://progit.org/book/ch9-7.html#removing_objects cho một điều trị sâu rộng của đối tượng và các ví dụ

+0

Liên kết rất hữu ích, cảm ơn rất nhiều. – Bastes

+0

Liên kết đó hiện đã bị hỏng: Hãy thử https://git-scm.com/book/en/v2/Git-Internals-Maintenance-and-Data-Recovery#Removing-Objects – Eosis

0

Nếu mục tiêu là để loại bỏ các tập tin từ các kho lưu trữ (như vậy, viết lại lịch sử), sử dụng BFG Repo-Cleaner, ví dụ:

bfg --delete-files '*.wmv' --private --no-blob-protection 

Nếu các tệp có liên quan, bạn có thể giữ chúng dưới sự kiểm soát phiên bản bằng cách sử dụng Git LFS. Để migrate (cũng viết lại lịch sử), bạn làm điều gì đó như:

git-lfs-migrate \ 
    -s original.git \ 
    -d converted.git \ 
    -l https://user:[email protected]:8080 \ 
    '*.wmv' 

để chỉ cần liệt kê hoặc kiểm tra các cam kết, tôi tham khảo câu trả lời knittl của:

git rev-list --all -- '*.wmv' 
git log --all -- '*.wmv' 
0

Điều này có thể làm việc trong gitk là tốt, bằng cách sử dụng các tệp Xem và/Xem/Nhập mới để đưa vào, mỗi hộp một dòng.

Nhưng lưu ý rằng bạn cần một ký tự đại diện bao gồm phần đường dẫn của tên tệp hoặc không có nội dung nào khác sẽ hiển thị. (!)

ví dụ như nếu bạn đã có một tập tin gọi backup-script.sh, với một cuộc sống khác nhau xuất hiện ở những nơi khác nhau trong cây tập tin và bạn muốn xem tất cả các phiên bản, sau đó bạn phải xác định:

*/backup-script.sh 
1

Bạn có thể thử này:

git log --follow *.wmv 

này sẽ liệt kê tất cả các cam kết (với băm) mà sửa đổi các file wmv.

+0

Không hoàn toàn những gì OP cần: '--follow 'chỉ hoạt động cho một tệp trong Git mới nhất. – wotopul

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