2009-11-17 23 views
5

git grep --cached foo nasıl çalışır? git grep foo gibi git sürüm 1.6.4.4 veya 1.6.5.2, git grep --cached foo döner tamamen aynı şeyi Running. git grep --cached

Ben aşama alanında sadece değişiklikleri arama, git diff --cached gibi çalışmak düşündüm. Yani man page beni inandıramaz kesinlikle ne var:

git diff [--options] --cached [<commit>] [--] [<path>…] 

Bu form adlı <commit> göre taahhüt sonraki için sahnelenen değişiklikleri görüntülemek etmektir. Tipik olarak en son işlemle karşılaştırmak isteyebilirsiniz, bu yüzden <commit> vermezseniz, varsayılan olarak HEAD. HEAD ana kadar (örneğin doğmamış dallar) ve <commit> verilmez etmez, bu tüm değişiklikleri aşamalı gösterir. --staged, --cached eşanlamlısıdır.

Bu bir hata mıdır, yoksa söz konusu işlenmeye ilişkin değişiklikleri bulmanın alternatif/daha iyi bir yolu var mı?

git diff --cached | grep foo 

yukarıdaki komut Bana istediğim şeyi yarısını verir, ancak değişikliğin görünür dosyanın hangisi bağlamını kaybeder.

GÜNCELLEME

Öyle bir kavram hatası için var görünür ne --cached bakıyor. Ağaçlandırma alanının uygulandığı varsayılarak ağacın durumunu araştırıyor gibi görünüyor. Bu mantıklı, şimdi bunun hakkında düşünüyorum. Ne aramak istediğiniz fark değil tam ağaçtır.

Özellikle, ben içine SpecialLog(...) işlemek üzereyim (I telefonların veya bağlam umurumda değil) tüm dosyaların listesini bilmek istiyorum, bu yüzden bu dosyaları düzenlemek gidip SpecialLog kaldırabilirsiniz. Evet, git diff --cached'u yapabilirim ve SpecialLog için çağrı cihazında arama yapabilirim, ancak daha sonra tek bir dosyadaki büyük değişiklikler için çok sayıda kopya var ve baktığım dosya belli değil. Zaman geçer

cevap

9
$ git init 
Initialized empty Git repository in /tmp/foo/.git/ 
$ echo hi there >file 
$ git add file 
$ git commit -m 'added file' 
[master (root-commit) dc08993] added file 
1 files changed, 1 insertions(+), 0 deletions(-) 
create mode 100644 file 
$ echo hi again >>file 
$ git grep again 
file:hi again 
$ git grep --cached again 
$ 

...

$ git add file 
$ git grep --cached again 
file:hi again 

$PAGER için, taahhüt sonraki içeriğine git diff boruları çıkışını aramanızın kapsamını sınırlamak için. Eğer less için çağrı cihazını kurdum varsayarsak, git diff --cached arama bağlamında maçları gösterir.

$ echo SpecialLog >file2 
$ git add file2 
$ git diff-index --cached --name-only HEAD 
file 
file2 
$ git diff-index --cached -SSpecialLog --name-only HEAD 
file2 
$ git diff --cached -SSpecialLog --name-only 
file2 
+0

Teşekkür:

aşağıdaki örnekte olduğu gibi özel bir dize söz değişikliklerle dosyalar için dizinde arama yapın. Kavram hatamı anlamama yardımcı oldunuz (açıklamasında güncellemeye bakın). Yani gerçekten aradığım şey git diff ve grep'i birleştiren bir şey. Çağrı cihazı çalışıyor, ama aradığım şey değil;) –

+0

Güncellenmiş yanıta bakın. –

+0

Sweet! Tam olarak istediğim bu! –