2011-05-25 16 views
10

İki dosyanın arasında hangi dosyaların değiştirildiğini/eklendiğini/kaldırıldığını/yeniden adlandırıldığını/kopyalandığını izlemek için git diff --name-status kullanıyorum ve harika çalışıyor.Git-diff'i yalnızca bir dizine, çocukları olmadan nasıl sınırlandırabilirim?

$ git diff --name-status -C HEAD~1 HEAD 
R100 file1 newdir/file1 

verilen bir iç değişikliklerin listesine kendisini sınırlamak için git sormak için bir yolu var mı:

Şimdi bu olsun, ben git diff çalıştırmak sonra, newdir/file1 dosyayı file1 hareket işlemek ve varsayalım dizini ama onun çocukları değil mi? Kök dizinin ve newdir dizininin her ikisini de ayrı ayrı bilmek istiyorum. newdir için, çok kolay:

$ git diff --name-status -C HEAD~1 HEAD -- newdir 
A  newdir/file1 

... ama nasıl kök dizininde "tamamlayıcı" diff bilgi edinebilirsiniz? Yani bu çıkışı: Ben aynı dizin içinde yeniden adlandırır ve kopyalar tespit etmek için -C seçeneği tutmak istiyorum

$ git diff ??? 
D  file1 

Not.

cevap

1

Geçiş onu içinden çalışmalıdır gibi patchutils bir şey filterdiff/grepdiff programlarını kullanmak için cazip olacağını:

git diff --name-status HEAD..HEAD~1 . | grep ^[^/]*$ 

Eğer bir şey almak gerekiyorsa bu, bir alt dizin içeren bir şey filtreleyecektir.END_ITEMEND_UNORDERED_LIST daha derin bunu yapmak:

git diff --name-status HEAD..HEAD~1 <path> | grep ^<path>[^/]*$ 

İsterseniz bunu kolayca taklit edebilirsiniz.

+0

'git diff .. - ' benim için çalıştı. – sholsinger

1

Ben git onun muhtemelen yapılabilir biliyorum ama bu grep için ok

git diff -C .... | filterdiff --clean -x '*/*/**' 
+0

'git diff --name-status'un çıktısı bir yama dosyası değil, yalnızca değiştirilmiş dosyaların bir listesidir, bu yüzden 'filterdiff' yardımcı olmaz. –

İlgili konular