Bagaimana cara 'git diff' pada direktori tertentu?

132

git diffsebenarnya menjalankan diff pada semua kode sumber. Bagaimana cara melakukan ini pada direktori tertentu, sehingga saya dapat melihat modifikasi pada file di bawahnya?

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

Jawaban:

126

Berikan jalur (folder saya dalam kasus ini) dan jalankan saja:

git diff myfolder/
Geo
sumber
28
Saya ingin menggunakan git diff -- myfolderuntuk meminimalkan ambiguitas pada git. Notasi umum untuk git diff (dan banyak perintah git) adalah git diff [commit-ish] -- [path]tempat commit-ish default ke HEAD (di mana Anda berada sekarang) dan [path]default ke direktori root git, tetapi bisa apa saja yang berhubungan dengan direktori Anda saat ini. Tanpa --, git akan menebak apa yang Anda maksud, [commit-ish]atau [path]. Dalam beberapa kasus, hal ini menyebabkan git mengatakan bahwa notasi tersebut 'ambigu'. Jika saya ingat dengan benar.
L0LN1NJ4
2
Ini tidak mencetak apa-apa ketika saya mencoba metode dalam jawaban dan metode di komentar.
ray
@ray yang berarti Anda tidak memiliki perbedaan antara pohon kerja dan commit terbaru
valerij vasilcenko
3
Untuk @ray dan calon individu yang melihat ini, Anda dapat menyertakan cabang yang Anda coba git diff master..develop myfolder/bedakan seperti yang dikatakan @CrandellWS dalam komentar di pertanyaan awal. Status Git akan menunjukkan perubahan jika itu yang Anda cari.
BVBA mempercepat
2
@ray pastikan Anda berada di direktori root. Path akan relatif ke direktori Anda saat ini.
Nickofthyme
59

Jika Anda membandingkan cabang yang berbeda, Anda perlu menggunakan --untuk memisahkan revisi Git dari jalur sistem file. Misalnya, dengan dua cabang lokal, masterdan bryan-working:

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

Atau dari cabang lokal ke remote:

$ git diff master -- AFolderOfCode/ origin/master -- AFolderOfCode/
bcattle
sumber
29
Hanya satu - klausa yang diperlukan setelah mendaftar kedua cabang, seperti dalam: git diff branch1 branch2 - path / to / dir
emery
4

Anda harus membiasakan melihat dokumentasi untuk hal-hal seperti ini. Ini sangat berguna dan akan meningkatkan keterampilan Anda dengan sangat cepat. Inilah sedikit yang relevan saat Anda melakukannyagit help diff

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

Keduanya <path>adalah apa yang perlu Anda ubah ke direktori yang dimaksud.

Noufal Ibrahim
sumber
3

Tambahkan Beyond Compare sebagai difftool Anda di Git dan tambahkan alias untuk diffdir sebagai:

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

Dapatkan gitdiff sebagai:

git diffdir 4bc7ba80edf6  7f566710c7

Referensi: Bandingkan seluruh direktori dengan difftool + Beyond Compare

Barani
sumber
1
Tanda sama dengan tampaknya salah untuk git 2.17.1. Gunakan git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"sebagai gantinya
Mark Schäfer
Perhatikan bahwa ketika menggunakan Beyond Compare untuk dir diff, Anda perlu mengkonfigurasinya untuk mengikuti symlinks (Dalam Folder Bandingkan Tampilan -> Aturan (ikon wasit) -> Penanganan -> ikuti symlinks) ATAU, tambahkan --no-symlinksopsi sehingga perintah terbacagit difftool --dir-diff --no-symlinks
Ashutosh Jindal
1

Tidak hanya Anda dapat menambahkan jalur, tetapi Anda dapat menambahkan git diff --relativeuntuk mendapatkan hasil yang sesuai dengan folder itu.

git -C a/folder diff --relative

Dan dengan Git 2.28 (Kuartal 3 2020), perintah dalam keluarga " diff" belajar untuk menghormati diff.relativevariabel konfigurasi " ".

Lihat commit c28ded8 (22 Mei 2020) oleh Laurent Arnoud ( spk) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam commit e34df9a , 02 Jun 2020)

diff: tambahkan opsi konfigurasi relative

Ditandatangani oleh: Laurent Arnoud
Diakui oleh: Đoàn Trần Công Danh

The diff.relativeboolean set pilihan untuk truemenunjukkan hanya perubahan dalam arus direktori / nilai yang ditentukan oleh pathargumen dari relativepilihan dan menunjukkan nama path relatif ke direktori tersebut.

Ajari --no-relativeuntuk menimpa sebelumnya--relative

Tambahkan untuk dokumentasi opsi git-format-patch (1) --relativedan--no-relative

The Dokumentasi sekarang termasuk :

diff.relative:

Jika disetel ke ' true', ' git diff' tidak menampilkan perubahan di luar direktori dan menunjukkan nama jalur relatif ke direktori saat ini.

VonC
sumber
0

Jika Anda ingin mengecualikan sub-direktori, Anda dapat menggunakan

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

Untuk menggunakan Beyond Compare sebagai difftool untuk direktori diff, ingat aktifkan tautan simbolik berikut seperti ini:

Dalam Folder Bandingkan TampilanAturan (Ikon Wasit):

Masukkan deskripsi gambar di sini

Dan kemudian, aktifkan ikuti tautan simbolis dan perbarui default sesi:

Masukkan deskripsi gambar di sini


ATAU,

atur alias seperti ini:

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

Perhatikan bahwa dalam kedua kasus, setiap pengeditan yang dilakukan ke samping (kiri atau kanan) yang mengacu pada pohon kerja saat ini dipertahankan.

Ashutosh Jindal
sumber