Belirli bir dizinde nasıl 'git diff' yapabilirim?


132

git diffaslında tüm kaynak kodunda bir fark çalıştırır. Bunu, altındaki dosyalardaki değişiklikleri görebilmek için belirli bir dizinde nasıl yaparım?


2
stackoverflow.com/a/12123669/1815624 git diff master..yourbranch path/to/folder
CrandellWS

Yanıtlar:


126

Bir yol sağlayın (bu durumda klasörüm) ve çalıştırın:

git diff myfolder/

28
git diff -- myfolderGit ile ilgili belirsizliği en aza indirmek için kullanmak istiyorum . Git diff (ve birçok git komutu) için genel gösterim, git diff [commit-ish] -- [path]commit-ish'in varsayılan olarak HEAD (şu anda bulunduğunuz yer) ve [path]git kök dizini için varsayılan olduğu, ancak mevcut dizininizle ilgili herhangi bir şey olabilir. Olmadan --, git ne demek istediğini tahmin edecek [commit-ish]ya [path]. Bazı durumlarda bu, git'in gösterimin 'belirsiz' olduğunu söylemesine neden olur. Eğer doğru hatırlıyorsam.
L0LN1NJ4

2
Cevaptaki yöntemi ve yorumdaki yöntemi denediğimde bu hiçbir şey yazdırmıyor.
ray

@ray, bu da çalışma ağacı ile en son işleme arasında hiçbir farkınız olmadığı anlamına gelir
valerij vasilcenko

3
@CrandellWS'nin git diff master..develop myfolder/orijinal soruya yapılan yorumda dediği gibi, @ray ve bunu gören gelecekteki bireyler için, aralarında ayrım yapmaya çalıştığınız dalları dahil edebilirsiniz . Git durumu, aradığınız buysa size değişiklikleri gösterecektir.
BVBAccelerate

2
@ray kök dizinde olduğunuzdan emin olun. Yol, mevcut dizininize göre olacaktır.
Nickofthyme

59

Farklı dalları karşılaştırıyorsanız, --Git revizyonunu dosya sistemi yolundan ayırmak için kullanmanız gerekir . Örneğin, iki yerel şubeyle masterve bryan-working:

$ git diff master -- AFolderOfCode/ bryan-working -- AFolderOfCode/

Veya yerel bir şubeden uzak bir şubeye:

$ git diff master -- AFolderOfCode/ origin/master -- AFolderOfCode/

29
Her iki dalı da listeledikten sonra yalnızca bir cümle gereklidir, örneğin: git diff branch1 branch2 - path / to / dir
emery

4

Bunun gibi şeyler için belgelere bakmayı alışkanlık haline getirmelisiniz. Çok kullanışlıdır ve becerilerinizi çok hızlı bir şekilde geliştirecektir. İşte yaptığınızda alakalı kısımgit help diff

   git diff [options] [--no-index] [--] <path> <path>

İki <path>s, söz konusu dizinlere değiştirmeniz gerekenler.


3

Ekle ötesinde karşılaştır Git daki difftool olarak ve sıra diffdir için bir takma ad ekleyin:

git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"

Gitdiff'i şu şekilde alın:

git diffdir 4bc7ba80edf6  7f566710c7

Referans: Tüm dizinleri karşılaştırın w git difftool + Karşılaştırmanın Ötesinde


1
Eşittir işareti, Git 2.17.1 için yanlış görünüyor. git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"Bunun yerine kullanın
Mark Schäfer

Dir diff için Ötesi Karşılaştır'ı kullanırken, ya sembolik bağları izleyecek şekilde yapılandırmanız gerekir (Bir Klasör Karşılaştırma Görünümü'nde -> Kurallar (hakem simgesi) -> İşleme -> sembolik bağları izle) VEYA --no-symlinksseçeneği, komutun okuyacağı şekilde eklemeniz gerekir.git difftool --dir-diff --no-symlinks
Ashutosh Jindal

1

Sadece bir yol eklemekle kalmaz, aynı git diff --relativezamanda o klasöre göre sonuç almak için ekleyebilirsiniz .

git -C a/folder diff --relative

Ve Git 2.28 (Q3 2020) ile, " diff" ailesindeki komutlar " diff.relative" yapılandırma değişkenine saygı göstermeyi öğrendi .

Laurent Arnoud ( ) tarafından hazırlanan commit c28ded8'e (22 Mayıs 2020) bakın . ( Junio ​​C Hamano ile birleştirildi - - in commit e34df9a , 02 Haz 2020)spk
gitster

diff: yapılandırma seçeneği ekle relative

İmza: Laurent Arnoud
Kabul eden: Đoàn Trần Công Danh

diff.relativeBoole seçenek grubu truegösterir, sadece belirtilen mevcut dizin / değerindeki değişimin pathbir bağımsız değişken relativeyukarıda belirtilen dizine göre seçeneği ve Şekil yol adlarının.

--no-relativeDaha önce geçersiz kılmayı öğretin--relative

Git-format-patch (1) seçenekleri dokümantasyonu --relativeve--no-relative

Dokümantasyon şimdi içerir :

diff.relative:

' true' Olarak ayarlanırsa , ' git diff' dizin dışındaki değişiklikleri göstermez ve mevcut dizine göre yol adlarını gösterir.


0

Alt dizinleri dışarıda bırakmak istiyorsanız, kullanabilirsiniz

git diff <ref1>..<ref2> -- $(git diff <ref1>..<ref2> --name-only | grep -v /)

0

Farkı dizini için fark aracı olarak Ötesi Karşılaştırmayı kullanmak için, aşağıdaki gibi sembolik bağları takip etmeyi etkinleştirmeyi unutmayın:

Bir de Klasör Görünümü karşılaştırKuralları (Hakem Simgesi):

Buraya resim açıklamasını girin

Ardından, simgesel bağlantıları takip et ve oturum varsayılanlarını güncelle seçeneğini etkinleştirin:

Buraya resim açıklamasını girin


VEYA,

takma adı şu şekilde ayarlayın:

git config --global alias.diffdir "difftool --dir-diff --tool=bc3 --no-prompt --no-symlinks"

Her iki durumda da, geçerli çalışma ağacına atıfta bulunan tarafta (sol veya sağ) yapılan tüm düzenlemelerin korunduğunu unutmayın.

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.