Tìm các tệp được thay đổi nhiều nhất trong Git


105

Làm cách nào để hiển thị các tệp trong Git thường thay đổi nhất?

Câu trả lời:


45

bạn có thể sử dụng lệnh git effort(từ git-extrasgói) hiển thị số liệu thống kê về số lần cam kết trên mỗi tệp (theo số lần cam kết và số ngày hoạt động).

CHỈNH SỬA: git nỗ lực chỉ là một tập lệnh cơ bản mà bạn có thể tìm thấy ở đây và điều chỉnh theo nhu cầu của bạn nếu bạn cần thứ gì đó đặc biệt hơn.


Đầu ra sẽ có 2 phần, đầu tiên bạn nhận được kết quả chưa được sắp xếp, sau đó là kết quả được sắp xếp (và có màu). Đúng?
Andy

@Andy có vẻ như vậy (và git help effortkhông có thông tin gì về nó: /). Tôi giả sử tập hợp kết quả đầu tiên được sắp xếp theo tên tệp và kết quả thứ hai theo số lượng cam kết trên mỗi tệp. Trang người đàn ông cũng đề cập đến github.com/tj/git-extras/issues để báo cáo sự cố
Asenar

cái này có giống cái này không? blog.riff.org/…

155

Bạn có thể làm điều gì đó như sau:

git log --pretty=format: --name-only | sort | uniq -c | sort -rg | head -10

Nhật ký chỉ xuất ra tên của các tệp đã được thay đổi trong mỗi lần cam kết, trong khi phần còn lại của nó chỉ sắp xếp và xuất ra 10 tên tệp xuất hiện thường xuyên nhất.


Bạn có thể vui lòng cho tôi biết nếu điều này là dựa trên chi nhánh hiện tại hoặc nếu nó là cho toàn bộ kho lưu trữ? Còn các chi nhánh chưa sáp nhập thì sao?
Karthick S

@KarthickS: chỉ dành cho các cam kết trong chi nhánh hiện tại - bạn có thể thêm --branchesvào git lognếu bạn muốn bao gồm các cam kết trên bất kỳ chi nhánh nào tại địa phương của mình.
Mark Longair

1
Đẹp. Ngoài ra, tôi thấy nó cũng báo cáo tệp đã bị xóa từ lâu. Cách khắc phục nhanh là giới hạn thời gian, ví dụ: --since = "last year"
FractalSpace

2
cũng hữu ích được sử dụng --since "1 month ago"hoặc các tùy chọn khác để thu hẹp cửa sổ thời gian

3
Tìm thấy một phần của câu trả lời của tôi:git log --pretty=format: --since="1 year ago" --name-only -- "*.java" | sort | uniq -c | sort -rg | head -10
AdamMc331

13

Tôi nhận thấy rằng cả câu trả lời của Marksehe đều không phải --followlà tệp, nghĩa là chúng dừng lại sau khi đổi tên tệp. Tập lệnh này sẽ chậm hơn nhiều, nhưng sẽ hoạt động cho mục đích đó.

git ls-files |
while read aa
do
  printf . >&2
  set $(git log --follow --oneline "$aa" | wc)
  printf '%s\t%s\n' $1 "$aa"
done > bb
echo
sort -nr bb
rm bb

git-most.sh


1
Để mở rộng điều này, tôi đã tạo gist.github.com/caleb15/da591031936f35d80e14a42ca7ba4350 Nó tổng hợp các thay đổi theo thư mục, cụ thể theo từng thư mục trong thư mục rolescho trường hợp của tôi nhưng dễ dàng sửa đổi để phù hợp với trường hợp sử dụng của bạn.
Almenon

3

Đối với powershell, giả sử bạn đã cài đặt git bash

git log --pretty=format: --name-only | sort | uniq -c | sort -Descending | select -First 10

3

Đây là phiên bản windows

git log --pretty=format: --name-only  > allfiles.csv

sau đó mở trong excel

A1: FileName
A2: isVisibleFilename  >> =IFERROR(IF(C2>0,TRUE,FALSE),FALSE)
A3: DotLocation >> =FIND("@",SUBSTITUTE(A2,".","@",(LEN(A2)-LEN(SUBSTITUTE(A2,".","")))/LEN(".")))
A4: HasExt       >> =C2>1
A5: TYPE        >> =IF(D2=TRUE,MID(A2,C2+1,18),"")

tạo bảng tổng hợp

values: Type
  Filter: isFilename = true
  Rows : Type
  Sub : FileName

click [Count Of TYPE] -> Sort -> Sort Largest To Smallest

Vì mình không biết nhiều về excel nên không hiểu các hướng dẫn này.
BigMiner

2
git whatchanged --all | \grep "\.\.\." | cut -d' ' -f5- | cut -f2- | sort | uniq -c | sort

Nếu bạn chỉ muốn xem các tệp của mình được thêm --authorvào git whatchanged --author=name --all.


1

Câu hỏi cũ, nhưng tôi nghĩ vẫn là một câu hỏi rất hữu ích. Đây là một ví dụ làm việc trong powershell thẳng. Điều này sẽ nhận được 10 tệp được thay đổi nhiều nhất trong kho lưu trữ của bạn liên quan đến nhánh bạn đang tham gia.

git log --pretty=format: --name-only | Where-Object { ![string]::IsNullOrEmpty($_) } | Sort-Object | Group-Object  | Sort-Object -Property Count -Descending | Select-Object -Property Count, Name -First 10

0

Chúng tôi cũng có thể tìm ra các tệp được thay đổi giữa hai cam kết hoặc nhánh, ví dụ:

git log  --pretty=format: --name-only <source_branch>...<target_branch> | sort | uniq -c | sort -rg | head -50 

0

Điều này có lẽ là hiển nhiên, nhưng, các truy vấn được cung cấp sẽ hiển thị tất cả các tệp, nhưng có lẽ bạn không quan tâm đến việc biết rằng các tệp cấu hình hoặc dự án của bạn là tệp được cập nhật nhiều nhất. Một grep đơn giản sẽ cách ly với các tệp mã của bạn, ví dụ:

git log --pretty=format: --name-only | grep .cs$ | sort | uniq -c | sort -rg | head -20
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.