2012-05-22 14 views
6

Ben seçilen kaydedilmesini görüntülerken tek modifiye dosya olarak <path>, git listeleri <path> modifiye kaydedilmesini Günlüğü sınırlamak için git log --stat ile <path> argüman kullanırlar. Seçilen her işlem için numaralı değiştirilmiş yollarını listelemek isterim. ÖrneğinNasıl yapılır? Git log --stat - <path> `show * all * dosyaları seçilen varlıklar içinde?

: İkinci git log, yol argümanı a.txt ile aslında "2 dosya değişti" ne zaman , "1 dosya değişti" diyor

$ echo test > a.txt 
$ echo test > b.txt 
$ git add a.txt b.txt 
$ git commit -m test 
[...] 
2 files changed, 2 insertions(+), 0 deletions(-) 
[...] 
$ git log -n1 --stat 
[...] 

a.txt | 1 + 
b.txt | 1 + 
2 files changed, 2 insertions(+), 0 deletions(-) 
$ git log -n1 --stat -- a.txt 
[...] 

a.txt | 1 + 
1 files changed, 1 insertions(+), 0 deletions(-) 

Not. öğesinin a.txt ve b.txt öğelerinin değiştiğini ve yolunun a.txt yolunu temel almayı seçtiğini belirtmek isterim.

GÜNCELLEME: @jacknagel sorumu yanıtladı, ancak çözümünün gerçek kullanım durumumda çalışmadığı görülüyor. Gerçek kullanım durumumda, iki ilgili projenin ayrıldığı bir durumda, yeniden adlandırılanlar dahil bir dosyayı değiştiren tüm işlemleri arıyorum. Bir projede hangi değişikliklerin, diğer projede (yapılması gerek) ilgili değişiklikleri ima ettiğini anlamaya ihtiyacım var. Ne yazık ki, --full-diff ve --follow'u aynı anda kullanmaya çalıştığımda git şikayet ediyor.

Yani, benim gerçek durumda, ben yönetmeye çalışıyorum :

git log --stat --follow -- a.txt 

ve bu durumda çalışan bir çözüm olduğunu:

git log --format='%H' --follow -- a.txt | xargs git show --stat -C 
+0

bana çok mantıklı değil sormak herneyse. Bir komuta, yapılması amaçlanandan farklı bir şekilde davranmayı nasıl beklersiniz? Dosya adını verdiğinizde, bu dosyanın ayrıntılarını tek başına almasını söylüyorsunuz. Her iki şeyi de göstermek istiyorsanız, o zaman – positron

+0

@positron komutunu kullanın: İlgi alanlarını tanımlamak için dosya adını kullanıyorum, ancak bu işlemler için tam bilgi istiyorum. Özünde, ilgili diğer * bilinmeyen * dosya adlarını tanımlamak için verilen dosya adını kullanıyorum. Yani diğer dosyaları söyleyemem çünkü ne olduklarını bilmiyorum. – ntc2

+0

Yanıtınızı eklemek için * sorunuzu * düzenlemek yerine, kendi sorunuz olsa bile StackOverflow yöntemi bir cevap eklemektir. Ben doğru cevabı eklemenin özgürlüğünü aldım, ama kendiniz yayınlarsanız memnuniyetle sileceğim. – djeikyb

cevap

9

:

--full-diff 
     Without this flag, "git log -p <path>..." shows commits that touch 
     the specified paths, and diffs about the same specified paths. With 
     this, the full diff is shown for commits that touch the specified 
     paths; this means that "<path>..." limits only commits, and doesn't 
     limit diff for those commits. 

     Note that this affects all diff-based output types, e.g. those 
     produced by --stat etc. 
+0

Teşekkürler! Bu sorduğum soruya cevap veriyor ve ben de cevabı kabul ediyorum. Ancak, benim soru yeterince spesifik değildi ve ''follow' kullandığım gerçek durumumda' -full-diff' çalışmıyor. Soruyu güncelleyeceğim ve başka bir cevapta '--follow' ile çalışan bir çözüm ekleyeceğim. – ntc2

-1

komut davranmasını bekliyoruz nasıl amaçlanandan farklı bir şekilde mi? Dosya adını verdiğinizde, bu dosyanın ayrıntılarını tek başına almasını söylüyorsunuz. Eğer her iki dosya daha sonra komutunu kullanmak göstermek istiyorsanız

git log -n1 --stat . 

veya

git log -n1 --stat a.txt b.txt 
Sen --full-diff seçeneği kullanarak bu davranışı elde edebilirsiniz
+3

Sanırım bu fikir bana söylemek gerekirse "bana sadece dokunuşunu göstersem, ancak bu taahhütleri gösterirken, liste Yaptıkları her şey ". – jacknagel

+0

@jacknagel: tam olarak. – ntc2

0

İlk kimlikleri taahhüt bulmak daha sonra, her kimliği git show'a beslemek için xargs (veya gnu parallel) öğesine yönlendirin.

git log --format='%H' --follow -- a.txt | xargs git show --stat -C 

powershell ile pencerelerin üzerinde böyle bir şey (ama .. bunu test henüz değil) çalışması gerekir:

git log --format='%H' --follow -- a.txt | ForEach-Object { git show --stat -C $_ } 
İlgili konular