Git'te en çok değiştirilen dosyaları bulma


105

Git'te en sık değişen dosyaları nasıl gösterebilirim?

Yanıtlar:


45

dosya başına kaç kaydetme (kaydetme ve etkin günlere göre) hakkında istatistikleri gösteren git effort( git-extraspaketten) komutunu kullanabilirsiniz .

DÜZENLEME: git çaba sadece bir betik burada bulabilirsiniz ve daha özel bir şey gerekiyorsa ihtiyaçlarınıza adapte.


Çıktı 2 bölümlü olacaktır, önce sıralanmamış sonuçları, ardından sıralı (ve renkli) sonuçları alırsınız. Sağ?
Andy

@Andy öyle görünüyor (ve git help effortbunun hakkında hiçbir bilgisi yok: /). İlk sonuç kümesinin dosya adına göre ve ikinci sonuç kümesinin dosya başına işleme sayısına göre sıralandığını varsayıyorum. Man sayfasında ayrıca sorunları bildirmek için github.com/tj/git-extras/issues'den bahsedilir
Asenar

bu buna benzer mi? blog.riff.org/…

155

Aşağıdaki gibi bir şey yapabilirsiniz:

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

Günlük yalnızca her işlemede değiştirilen dosyaların adlarını verirken geri kalanı yalnızca en sık görünen ilk 10 dosya adını sıralar ve çıkarır.


Lütfen bana bunun mevcut şubeye mi dayandığını yoksa tüm depo için mi olduğunu söyleyebilir misiniz? Henüz birleştirilmemiş şubeler ne olacak?
Karthick S

@KarthickS: Sadece geçerli dalında kaydedilmesini içindir - Eklemek olabilir --branchesiçin git logyerel dalları hiçbirinde kaydedilmesini dahil etmek istiyorum.
Mark Longair

1
Güzel. Ayrıca, uzun zaman önce silinen rapor dosyasını da buldum. Hızlı düzeltme, zamanı sınırlamaktı, örneğin: --since = "geçen yıl"
FractalSpace

2
--since "1 month ago"zaman penceresini daraltmak için veya diğer seçenekleri kullanmak da yararlıdır

3
Cevabımın bir kısmını buldum:git log --pretty=format: --since="1 year ago" --name-only -- "*.java" | sort | uniq -c | sort -rg | head -10
AdamMc331

13

Her iki fark Mark ve sehe en cevapları yok --followdemektir ki çok dosya yeniden ulaştıklarında durdurmak demek ki, dosyaları. Bu komut dosyası çok daha yavaş olacak, ancak bu amaç için çalışacaktır.

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
Bunu genişletmek için gist.github.com/caleb15/da591031936f35d80e14a42ca7ba4350 oluşturdum değişiklikleri klasöre göre, özellikle rolesbenim durumum için dizindeki her bir klasöre göre toplar , ancak kullanım durumunuza uyacak şekilde kolayca değiştirilebilir.
Almenon

3

Powershell için, git bash'ın kurulu olduğunu varsayarak

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

3

Bu bir Windows sürümüdür

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

sonra excel'de aç

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),"")

pivot tablo oluştur

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

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

Excel hakkında pek bir şey bilmediğim için bu talimatları anlamıyorum.
BigMiner

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

Yalnızca görmek istiyorsan dosyalarınızı eklemek --authoriçin git whatchanged --author=name --all.


1

Eski soru, ama yine de çok faydalı bir soru olduğunu düşünüyorum. İşte düz powershell'de çalışan bir örnek. Bu, bulunduğunuz şubeye göre deponuzdaki en çok değiştirilen 10 dosyayı alacaktır.

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

Ayrıca iki işlem veya şube arasında değiştirilen dosyaları da bulabiliriz, örneğin

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

0

Bu muhtemelen açıktır, ancak sağlanan sorgular tüm dosyaları gösterecektir, ancak belki de yapılandırma veya proje dosyalarınızın en güncel dosyalar olduğunu bilmekle ilgilenmiyorsunuzdur. Basit bir grep kod dosyalarınızı izole eder, örneğin:

git log --pretty=format: --name-only | grep .cs$ | sort | uniq -c | sort -rg | head -20
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.