Пошук найбільш змінених файлів у Git


Відповіді:


45

Ви можете скористатися командою git effortgit-extrasпакета), яка показує статистику про кількість комісій у файлах (за комісіями та активними днями).

EDIT: git зусилля - просто баш сценарій, який ви можете знайти тут і адаптувати до своїх потреб, якщо вам потрібно щось більш особливе.


Вихід буде 2-розділеним, спочатку ви отримаєте несортовані результати, потім відсортовані (і кольорові) результати. Правильно?
Енді

@Andy, здається, (і git help effortне має про це інформації: /). Я припускаю, що перший набір результатів упорядковується за назвою файлу, а другий - за кількістю комірок у файлі. Сторінка людини також згадує github.com/tj/git-extras/isissue для повідомлення про проблеми
Asenar

це подібне до цього? blog.riff.org/…

155

Ви можете зробити щось подібне:

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

Журнал просто виводить імена файлів, які були змінені в кожному комісі, а решта - лише сортує та виводить топ-10 найпоширеніших імен файлів.


Скажіть, будь ласка, чи це базується на поточній гілці чи вона є для всього сховища? Що з гілками, які ще не злилися?
Karthick S

@KarthickS: це лише для комітетів у поточній гілці - ви можете додати --branchesдо цього, git logякщо хочете включити комітети в будь-яку з ваших місцевих гілок.
Марк Лонгейр

1
Приємно. Крім того, я виявив, що це файл звітів, який було видалено давно. Швидке виправлення було обмеження часу, наприклад: --since = "минулого року"
FractalSpace

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

Я помітив, що відповіді Марка та Sehe не відповідають --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каталозі для мого випадку, але легко змінюється, щоб відповідати вашому випадку використання.
Альменон

3

Для повноцінних програм, якщо припустити, що ви встановили 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

Якщо ви хочете лише бачити ваші файли, додані --authorдо git whatchanged --author=name --all.


1

Старе запитання, але я вважаю, що все ще дуже корисне питання. Ось робочий приклад прямої оболонки. Це дозволить отримати топ-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

Це, мабуть, очевидно, але надані запити показуватимуть усі файли, але, можливо, вам не цікаво знати, що ваші конфігураційні файли чи файли проекту найбільш оновлені. Простий греп виділить ваші кодові файли, наприклад:

git log --pretty=format: --name-only | grep .cs$ | sort | uniq -c | sort -rg | head -20
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.