2013-03-07 24 views
7

Diyelim ki bir dosyayı düzenliyorum. Dosyayı kaydedersem, git-diff bana dizinine göre değişimlerini verir. İlk önce dosyayı kaydetmeden dizine göre değişiklikleri almak istiyorum - "gerçek zamanlı" fark için.Bir dosyayı standart girişe karşı kaydırmak mümkün mü?

Bir çözüm, kaydedilmemiş değişiklikleri geçici bir dosyaya yazmak (yani dosyayı başka bir yere kaydetmek), aşamalı dosyayı başka bir geçici dosyaya (git show :file > tempfile2) sonra git-diff tempfile tempfile2'a yazmaktır. Ancak bu, yetersiz görünüyor.

Daha iyi bir yolu var mı?

+1

Neden dosyayı kaydetmiyorsunuz? Buna karşı ne konuşuyor? –

+2

Sadece boru kullanabiliyorsam dosyayı kaydetmekten kaçınmak güzel olurdu. –

+0

@AndyStewart: Neden bu güzel? Sadece tmp dosyasına bir dosya at. Bu zor değil, pek çok iş değil ... kesinlikle git'in gereksinimlerine göre çalışmaktan çok daha az (ama Ash Berlin'in cevabına bakın). – siride

cevap

2

Ash Berlin'in cevabı üzerine geliştirme.

Bu, git-diff'in güzel özelliklerini kullanmanızı sağlar. Hala bir geçici dosyaya yazmak zorunda çünkü bu hala, istediğiniz kadar uygun olmayabileceği anlamına

git show :file | git diff --no-index -- - temp_saved_path 

Not. Dosyayı kaydedene kadar, değişiklikler ya hiç diskte değil (yalnızca bellek içi) ya da editöre bağlı bir çeşit geçici dosyadadır. Vim'in bunu tek adımda sorunsuz bir şekilde yapması mümkündür, ama söyleyecek kadar tanıdık değilim.

+0

Vim, içeriği çağrılan harici komutun stdinine iletmenizi sağlar. Bu yüzden şimdi dosyanın dizin sürümünü geçici dosyaya yazıp, bellek içi dosyayı stdin:. Git: file: tmpfile && git diff - tmpfile-'dizinine aktarıyorum. –

+0

Ayrıca, dosya yollarından biri veya ikisi git repo'nun dışındaysa, '--no-index' otomatik olarak çıkarılır. –

8

git 1.5.1 yana stdin karşı diff için bir seçenek var oldu - bu sadece bu ile oynarken üzerine

$ echo foo | git diff --no-index -- my_file -

belgelenmiş sürülmemiştir biraz daha bu OP (veya) ne istediğini olmayabilir fark - Stdin'e dosyanın son halini değil, dosyanın güncel durumunu fark eder. Böyle bir şey

$ echo foo | diff -u <(git show :my_file) -

Not Bu çağırma anlama geliyor yapacağız git config bazı ayarları almayabilir hangi doğrudan fark. Temel olarak ams cevabında yazıyor.

İlgili konular