Git에서 가장 많이 변경된 파일 찾기


105

Git에서 가장 자주 변경되는 파일을 어떻게 표시 할 수 있습니까?

답변:


45

파일 당 커밋 수 (커밋 및 활성 날짜 별)에 대한 통계를 표시 git effort하는 ( git-extras패키지에서) 명령을 사용할 수 있습니다 .

편집 : 자식의 노력은 단지 떠들썩한 파티 스크립트 당신이 여기에서 찾을 수 있습니다 그리고 당신은 더 특별한 무언가가 필요하다면 여러분의 필요에 적응.


출력은 두 부분으로 나뉘며 먼저 정렬되지 않은 결과를 얻은 다음 정렬 된 (및 색상이 지정된) 결과를 얻습니다. 권리?
Andy

@Andy 그것은 (그리고 git help effort그것에 대한 정보가 없습니다 : /). 첫 번째 결과 세트는 파일 이름으로 정렬되고 두 번째 결과는 파일 당 커밋 수로 정렬된다고 가정합니다. man 페이지는 또한 문제를보고하기 위해 github.com/tj/git-extras/issues 를 언급 합니다
Asenar dec

이것과 비슷합니까? blog.riff.org/…

155

다음과 같이 할 수 있습니다.

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

로그는 각 커밋에서 변경된 파일의 이름 만 출력하고 나머지는 가장 자주 나타나는 상위 10 개의 파일 이름을 정렬하고 출력합니다.


이것이 현재 브랜치를 기반으로하는 것인지 아니면 전체 저장소를위한 것인지 알려주시겠습니까? 아직 병합되지 않은 분기는 어떻습니까?
Karthick S 2013 년

@KarthickS : 현재 브랜치의 커밋에만 해당 --branches됩니다.git log 로컬 브랜치의에 커밋을 포함 할 경우.
Mark Longair 2013 년

1
좋은. 또한 오래 전에 삭제 된 파일을보고하는 것도 발견했습니다. 빠른 수정은 시간을 제한하는 것이 었습니다. 예 : --since = "last year"
FractalSpace 2013

2
--since "1 month ago"또는 다른 옵션을 사용 하여 시간 창을 좁히는 것도 도움이됩니다.

3
내 대답의 찾을 일부 :git log --pretty=format: --since="1 year ago" --name-only -- "*.java" | sort | uniq -c | sort -rg | head -10
AdamMc331

13

Marksehe의 답변이 --follow파일 이 아니라는 것을 알았습니다. 즉 , 파일 이름이 변경되면 중지됩니다. 이 스크립트는 훨씬 느리지 만 그 목적으로 작동합니다.

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
이를 확장하기 위해 gist.github.com/caleb15/da591031936f35d80e14a42ca7ba4350을 만들었습니다. 폴더별로, 특히 roles제 경우 에 대한 디렉토리의 각 폴더별로 변경 사항을 집계 하지만 사용 사례에 맞게 쉽게 수정할 수 있습니다.
Almenon

3

powershell의 경우 git bash가 설치되어 있다고 가정합니다.

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

3

이것은 Windows 버전입니다

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

그런 다음 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),"")

피벗 테이블 생성

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

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

Excel에 대해 잘 모르기 때문에이 지침을 이해하지 못합니다.
BigMiner

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

만보고 싶다면 파일 추가 --authorgit whatchanged --author=name --all.


1

오래된 질문이지만 여전히 매우 유용한 질문이라고 생각합니다. 다음은 직선형 powershell의 작동 예입니다. 이것은 당신이 속한 브랜치와 관련하여 당신의 저장소에서 가장 많이 변경된 파일 10 개를 얻을 것입니다.

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

또한 두 개의 커밋 또는 분기간에 변경된 파일을 찾을 수 있습니다.

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

0

이것은 분명하지만 제공된 쿼리는 모든 파일을 표시하지만 구성 또는 프로젝트 파일이 가장 많이 업데이트되었는지 알고 싶지는 않을 것입니다. 간단한 grep은 코드 파일로 격리됩니다. 예를 들면 다음과 같습니다.

git log --pretty=format: --name-only | grep .cs$ | sort | uniq -c | sort -rg | head -20
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.