Git'in bir kullanıcının değiştirdiği tüm dosyaları bana anlatmasını sağlayabilir miyim?


150

Git'in bana tüm kayıtlarda tek bir kullanıcı tarafından değiştirilen tüm dosyaların bir listesini vermesini istiyorum.

Benim özel kullanım durumum, Ruby on rails projesinin i18n'ine dahil olmam ve hangi dosyaların zaten yapıldığını ve hangi dosyaların hala yapılması gerektiğini bilmek istiyoruz. Söz konusu kullanıcılar kod tabanının geri kalanında değil, sadece i18n üzerinde çalışmışlardır. Yani bilgilerin hepsi gitte olmalı, ama nasıl çıkaracağımı bilmiyorum.

Yanıtlar:


136

Tek yol bu değil ama işe yarıyor:

git log --pretty="%H" --author="authorname" |
    while read commit_hash
    do
        git show --oneline --name-only $commit_hash | tail -n+2
    done | sort | uniq

Veya tek satır olarak:

git log --pretty="%H" --author="authorname" | while read commit_hash; do git show --oneline --name-only $commit_hash | tail -n+2; done | sort | uniq

Böyle harika bir mantığı nasıl buldun? Bu mükemmel ! Bu tür komut dosyalarını oluşturmaya nereden başlamalıyız? Herhangi bir ipucu takdir edilecektir!
Shahbaaz Khan

187

Bu size basit bir dosya listesi verecektir, başka hiçbir şey vermeyecektir:

git log --no-merges --author="Pattern" --name-only --pretty=format:"" | sort -u

Gerektiğinde --author for --committer'ı değiştirin.


1
--name-onlyçıktıyı dosya adlarından başka bir şey yapmıyor gibi görünüyor. Bu gerçeği göz önünde bulundurursak, seçenekler --statve --pretty=format:""başarı nedir? Onları dışarıda bırakır mısın?
Jonah

1
@Jonah --pretty = format: "" gereklidir. Cevabı düzenledim.
Ian Kelling

3
küçük bir aksaklık olsa da harika çalışıyor: Çıktının başlangıcında boş bir bağlantı oluşturuyor, bu da sonucun 'wc -l' aracılığıyla bir dizi dosya almak için 1
farkla kesildiği anlamına geliyor

silinen dosyaları nasıl dışlayabilirim?
Tim Boland

8

Deneyin git log --stat --committer=<user>. --committer=Seçeneğin üzerine kullanıcının adını girin (veya --author=uygun şekilde kullanın ).

Bu, kaydetme başına tüm dosyaları tükürecektir, bu nedenle büyük olasılıkla bazı çoğaltmalar olacaktır.


0
git log --pretty= --author=@abcd.com --name-only | sort -u | wc -l

Git deposunda şirkete göre değiştirilen tüm dosyaları gösterir.

git log --pretty= --author=user@abcd.com --name-only | sort -u | wc -l

Değiştirilen tüm dosyaları git deposundaki yazar adına 'kullanıcı' ile gösterir.

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.