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?
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:
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
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 " ".
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.
Perhatikan bahwa dalam kedua kasus, setiap pengeditan yang dilakukan ke samping (kiri atau kanan) yang mengacu pada pohon kerja saat ini dipertahankan.
git diff master..yourbranch path/to/folder
Jawaban:
Berikan jalur (folder saya dalam kasus ini) dan jalankan saja:
sumber
git diff -- myfolder
untuk meminimalkan ambiguitas pada git. Notasi umum untuk git diff (dan banyak perintah git) adalahgit 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.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.Jika Anda membandingkan cabang yang berbeda, Anda perlu menggunakan
--
untuk memisahkan revisi Git dari jalur sistem file. Misalnya, dengan dua cabang lokal,master
danbryan-working
:Atau dari cabang lokal ke remote:
sumber
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 melakukannya
git help diff
Keduanya
<path>
adalah apa yang perlu Anda ubah ke direktori yang dimaksud.sumber
Tambahkan Beyond Compare sebagai difftool Anda di Git dan tambahkan alias untuk diffdir sebagai:
Dapatkan gitdiff sebagai:
Referensi: Bandingkan seluruh direktori dengan difftool + Beyond Compare
sumber
git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"
sebagai gantinya--no-symlinks
opsi sehingga perintah terbacagit difftool --dir-diff --no-symlinks
Tidak hanya Anda dapat menambahkan jalur, tetapi Anda dapat menambahkan
git diff --relative
untuk mendapatkan hasil yang sesuai dengan folder itu.Dan dengan Git 2.28 (Kuartal 3 2020), perintah dalam keluarga "
diff
" belajar untuk menghormatidiff.relative
variabel konfigurasi " ".Lihat commit c28ded8 (22 Mei 2020) oleh Laurent Arnoud (
spk
) .(Digabung oleh Junio C Hamano -
gitster
- dalam commit e34df9a , 02 Jun 2020)The Dokumentasi sekarang termasuk :
sumber
Jika Anda ingin mengecualikan sub-direktori, Anda dapat menggunakan
sumber
Untuk menggunakan Beyond Compare sebagai difftool untuk direktori diff, ingat aktifkan tautan simbolik berikut seperti ini:
Dalam Folder Bandingkan Tampilan → Aturan (Ikon Wasit):
Dan kemudian, aktifkan ikuti tautan simbolis dan perbarui default sesi:
ATAU,
atur alias seperti ini:
Perhatikan bahwa dalam kedua kasus, setiap pengeditan yang dilakukan ke samping (kiri atau kanan) yang mengacu pada pohon kerja saat ini dipertahankan.
sumber