SORU
4 Ocak 2011, Salı


Git: İstatistik Suçlama

Nasıl yapabilirim "kötüye kullanma" suçu (ya da biraz daha uygun fonksiyon ve/veya birlikte kabuk komutları) için bana bir istatistik ne kadar çizgiler (kod) şu anda depo kaynaklanan her committer?

Örnek Çıktı:

Committer 1: 8046 Lines
Committer 2: 4378 Lines

PS:) koşuyorum

CEVAP
3 Aralık 2012, PAZARTESİ


Güncelleme

git ls-tree -r -z --name-only HEAD -- */*.c | xargs -0 -n1 git blame \
--line-porcelain HEAD |grep  "^author "|sort|uniq -c|sort -nr

Bazı şeyleri güncelledim.

tembeller için de kendi komut içine koy

#!/bin/bash

# save as i.e.: git-authors and set the executable flag
git ls-tree -r -z --name-only HEAD -- $1 | xargs -0 -n1 git blame \
 --line-porcelain HEAD |grep  "^author "|sort|uniq -c|sort -nr

bu bir yerde senin yolunda mağaza veya yolunu değiştir ve öyle kullanın

  • git authors '*/*.c' # look for all files recursively ending in .c
  • git authors '*/*.[ch]' # look for all files recursively ending in .c or .h
  • git authors 'Makefile' # just count lines of authors in the Makefile

Orijinal Cevap

Kabul cevabı işi yaparken çok yavaş.

$ git ls-tree --name-only -z -r HEAD|egrep -z -Z -E '\.(cc|h|cpp|hpp|c|txt)$' \
  |xargs -0 -n1 git blame --line-porcelain|grep "^author "|sort|uniq -c|sort -nr

neredeyse anlıktır.

Dosyaların listesini almak için kullanabilirsiniz şu anda izleniyor

git ls-tree --name-only -r HEAD

Bu çözüm file dosya tipini belirlemek için arama önler ve grep performansı artırmak için istedim uzantısı eşleştirmek için kullanır. Eğer tüm dosyalar dahil edilmelidir, hatta bu kaldırın.

grep -E '\.(cc|h|cpp|hpp|c)$' # for C/C   files
grep -E '\.py$'               # for Python files

eğer dosyaları kabukları için kötü olan boşluklar içeriyorsa kullanabilirsiniz:

git ls-tree -z --name-only -r HEAD | egrep -Z -z '\.py'|xargs -0 ... # passes newlines as '\0'

Bir xargs komutu arayın ve bağımsız dağıtmak için kullanabilirsiniz dosyaları (boru ile) bir listesini verin. Birden fazla dosya işlenecek komutlar sağlar -n1 obmit. Bu durumda git blame --line-porcelain diyoruz ve her çağrı için tam olarak 1 değişken kullanıyoruz.

xargs -n1 git blame --line-porcelain

Biz o zaman filtre olaylar için çıktı "yazar" liste sıralama ve satır sayısı çift:

grep "^author "|sort|uniq -c|sort -nr

Not

Diğer cevaplar aslında sadece boşluklar içeren satırları filtrelemek.

grep -Pzo "author [^\n]*\n([^\n]*\n){10}[\w]*[^\w]"|grep "author "

Yukarıdaki komut satırlarını en az bir boşluk olmayan karakter içeren yazarlar baskı. Ayrıca boşluk olmayan ilk karakter olmadığı hatları hariç \w*[^\w#] # (birçok programlama dillerine yorum) maç kullanabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
Git

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Christopher Bill

    Christopher

    30 NİSAN 2009
  • ravinderosahn

    ravinderosah

    20 Temmuz 2009
  • Tome Rodrigo

    Tome Rodrigo

    9 Temmuz 2006