Soru Git, en çok hangi dosyalara sahip olduğunu öğrenin


Hangi dosyaların en çok etkinliğe sahip olduğunu görmek için git günlüklerimde nasıl arama yapabilirim?


21
2018-04-14 20:59


Menşei


İlgili: stackoverflow.com/questions/1265040/... - Josh Lee
Kullanabilirsiniz git diff --stat revA revB Tüm eklemeler kaldırılmasının toplamını almak için (ancak dosyaya gerçekten dokunan mutlak sayıyı size söylemez). - Jason LeBrun
Bu link belirli bir yazar için sadece bir komuttur. git log --numstat doğru yönde görünüyor, ama sadece belirli bir sırayla her dosya için istatistikleri tükürür, ama biz binlerce dosya gibi var. - JP Silvashy
@jason, teşekkürler, sorun bakmamıza gerek var. herşey İşlemler, hangi dosyaların en fazla taahhütte bulunduğunu veya en fazla ekleme / kaldırma işlemi gerçekleştirdiğini gördü ve gördü. - JP Silvashy
Olası kopya Git'te en çok değiştirilen dosyaları bulma - fracz


Cevaplar:


Ha! Bu şeylerden biri, çok kolay, yanlışlıkla (?):

git rev-list --objects --all | awk '$2' | sort -k2 | uniq -cf1 | sort -rn | head
  1. Tüm şubelerdeki tüm revizyonlardan tüm nesneleri bana ver
  2. yolu olmayan sonuçları yoksay
  3. onları yoluna göre sırala
  4. benzersiz kılmak (blob karmaşasını göz ardı etmek), önek satırları çoğaltma sayımı ile
  5. çoğaltma sayısında azalan sıralama
  6. en üst sıraları göster

Çıktı benzer

   1058 fffcba193374a85fd6a3490f800c6901218a950b src
    715 ffffe0f08798e95b66cc4ad4ff22cf10734d045e src/lib
    450 ffcfe596031a5985664e35937fff4ac9ff38dcca src/zfs-fuse
    367 ffc5d5340f95360fc9f7b739c5593dd3f92fced0 src/lib/libzpool
    202 ff92db000792044d45eec21c57a3cd21618631e7 src/lib/libsolkerncompat
    183 ff1a44edae3fd121ddd86864b589e5ab2f9ff99b src/lib/libzfscommon
    178 fec6b3a789e578983c2242b3aa5adf217cb8b887 src/lib/libzfs
    168 ffeefc9e81222d7c471bdb0911d8b98f23cff050 src/cmd
    167 fbd60bd3430765863648c52db7ceb3ffa15d5e50 src/lib/libzfscommon/include
    155 ff225f6b41f9557d683079c5f9276f497bcb06bd src/lib/libzfscommon/include/sys

Buradan alabilirsin.

Örneğin. Eğer sen sadece dosya lekelerini görmek istedim:

git rev-list --objects --all | awk '$2' | sort -k2 | uniq -cf1 | sort -rn |
    while read frequency sample path
    do 
       [ "blob" == "$(git cat-file -t $sample)" ] && echo -e "$frequency\t$path";
    done

çıktı:

135 src/zfs-fuse/zfs_operations.c
84  src/zfs-fuse/zfs_ioctl.c
79  src/zfs-fuse/zfs_vnops.c
73  src/lib/libzfs/libzfs_dataset.c
67  src/lib/libzpool/spa.c
66  src/zfs-fuse/zfs_vfsops.c
62  src/cmd/zdb/zdb.c
62  CHANGES
60  src/cmd/ztest/ztest.c
60  src/lib/libzpool/arc.c

Yalnızca belirli revizyon aralıklarını görmek istediniz

İle bir top olabilir rev-list Bölüm:

git rev-list --after=2011-01-01 --until='two weeks ago' \
     tag1...remote/hotfix ^master

Yalnızca belirtilen tarih aralığındaki düzeltmeleri kullanacaktır, bunlar simetrik set farkındadır. tag1 ve remote/hotfix ve değil usta


36
2018-04-14 21:53



Vay harika iş! bu harika - JP Silvashy
Şerefe. Bunu yazarken eğlendim :) Laaaaarge kudos UNIX'in felsefesinde gitmiş olan beyefendilere - sehe


kullanımları git effort [--above <value>] Tüm dosyaları ve ilgili işlem sayısını listelemek için (git-extras paketinden).

Bir yolu kısıtlayabilirsiniz


4
2018-02-05 13:16





İşte sonuç almak için log --numstat çıkışını pipetleyebileceğiniz bir python betiği:

import sys, re

res = {}

while 1:
    line = sys.stdin.readline()
    if len(line) == 0:
        break;
    m =  re.match("([0-9]+)[ \t]+([0-9]+)[ \t]+(.*)", line)
    if m != None:
        f = m.group(3)
        if f not in res: res[f] = {'add':0, 'rem':0, 'commits':0} 
        res[f]['commits'] += 1
        res[f]['add'] += int(m.group(1))
        res[f]['rem'] += int(m.group(2))

for f in res:
    r = res[f]
    print "%s %s %s %s"%(r['commits'], r['add'], r['rem'], f)

Nasıl istediğinizi sıralamak / filtrelemek için gerektiği gibi değiştirebilirsiniz.


1
2018-04-14 21:37





Seçmek istediğiniz revizyon aralığının kabul edilmesi <range>, komuta:

git log --format=%n --name-only <range>|sort|uniq -c|tail -n +2

depolarınızın her bir dosyası için, farklılıklar olarak dosya oluşturma dahil olmak üzere, değişiklik farkları, yani değişiklik sayısı gibi olayların sayısı için çıktı olacaktır. Tut <range> şubenize ilk işlemden istatistikleri almak için boş HEAD.


0
2018-04-14 22:16