Как в Git показать файлы, которые меняются чаще всего?
Ответы:
вы можете использовать команду git effort
(из git-extras
пакета), которая показывает статистику о количестве коммитов для каждого файла (по коммитам и активным дням).
РЕДАКТИРОВАТЬ: git усилия - это просто сценарий bash, который вы можете найти здесь и адаптировать к своим потребностям, если вам нужно что-то более особенное.
git help effort
не имеет об этом информации: /). Я предполагаю, что первый набор результатов упорядочен по имени файла, а второй - по количеству фиксации для каждого файла. На странице
Вы можете сделать что-то вроде следующего:
git log --pretty=format: --name-only | sort | uniq -c | sort -rg | head -10
Журнал просто выводит имена файлов, которые были изменены в каждой фиксации, в то время как остальная часть просто сортирует и выводит 10 наиболее часто встречающихся имен файлов.
--branches
в, git log
если хотите включить коммиты в любую из ваших локальных веток.
git log --pretty=format: --since="1 year ago" --name-only -- "*.java" | sort | uniq -c | sort -rg | head -10
Я заметил, что
ответы Марка
и
Сехе не относятся--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
roles
каталоге для моего случая, но легко модифицируется в соответствии с вашим вариантом использования.
Это версия для 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
Старый вопрос, но я думаю, что это очень полезный вопрос. Вот рабочий пример в формате 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
Мы также можем узнать файлы, измененные между двумя коммитами или ветвями, например
git log --pretty=format: --name-only <source_branch>...<target_branch> | sort | uniq -c | sort -rg | head -50
Это, вероятно, очевидно, но предоставленные запросы будут отображать все файлы, но, возможно, вам не интересно знать, что ваши файлы конфигурации или проекта являются наиболее обновленными. Простой grep изолирует ваши файлы кода, например:
git log --pretty=format: --name-only | grep .cs$ | sort | uniq -c | sort -rg | head -20