"Git diff" tidak melakukan apa-apa

96

Saya kira ini adalah kesalahan konfigurasi di suatu tempat, tetapi saya tidak tahu di mana. Perintah git biasa tampaknya berfungsi dengan baik, tetapi "git diff" tidak melakukan apa-apa. Untuk amannya, saya menghapus alat diff eksternal dari file .gitconfig saya. Ini diinstal melalui MacPorts dan merupakan versi terbaru (1.7.2.2).

Apa yang saya lihat adalah ketika saya menjalankan "git diff" dari ruang kerja saya, ia keluar begitu saja, tidak melakukan apa-apa.

$ git --version
git version 1.7.2.2
$ git diff
$ 

Jika saya mencadangkan satu direktori, dari ruang kerja root saya, mengetik "git diff" memberi saya ini:

$ git diff
usage: git diff [--no-index] <path> <path>

Ini mungkin perilaku yang diharapkan karena saya tidak menggunakan repositori git.

Ada ide tentang apa yang dapat saya lakukan untuk memecahkan masalah ini?

Tom Lianza
sumber
Apa yang membuat Anda berpikir ada sesuatu yang perlu dipecahkan? Apa yang ingin Anda lihat?
Rob Kennedy
Catatan: pesan kesalahan saat menggunakan di git diff luar repo akan segera lebih jelas. Lihat jawaban saya di bawah
VonC
1
Perhatikan bahwa jika Anda mencoba untuk membedakan file tertentu antara dua komit dan tidak melihat keluaran, pastikan casing sudah benar di jalur ke file tersebut.
Seth Flowers

Jawaban:

111

Keluaran default untuk git diffadalah daftar perubahan yang belum dilakukan / ditambahkan ke indeks. Jika tidak ada perubahan, maka tidak ada keluaran.

git diff [--opsi] [-] […]

Formulir ini untuk melihat perubahan yang Anda buat relatif terhadap indeks (area pementasan untuk komit berikutnya). Dengan kata lain, perbedaannya adalah apa yang dapat Anda katakan kepada git untuk ditambahkan lebih lanjut ke indeks tetapi Anda masih belum melakukannya.

Lihat dokumentasi untuk lebih jelasnya. Secara khusus, gulir ke bawah ke contoh, dan baca bagian ini:

$ git diff            # (1)
$ git diff --cached   # (2)
$ git diff HEAD       # (3)
  1. Diff copy pekerjaan dengan indeks
  2. Diff indeks dengan HEAD
  3. Diff copy pekerjaan dengan HEAD

Di luar ruang kerja Anda, seperti yang Anda tebak, git tidak akan tahu apa yang harus di-diff, jadi Anda harus secara eksplisit menentukan dua jalur untuk dibandingkan, oleh karena itu pesan penggunaan.

Douglas
sumber
13
Saya tidak yakin jawaban Anda benar, tetapi itu membantu saya menemukan jawabannya, jadi terima kasih dan saya akan menandainya seperti itu! Keluaran default untuk git diff bukanlah daftar perubahan yang tidak dilakukan, ini adalah daftar perubahan yang belum dilakukan yang juga "belum dipentaskan untuk commit berikutnya". Jadi, perintah yang melakukan apa yang saya harapkan dari "git diff" sebenarnya adalah "git diff HEAD".
Tom Lianza
2
Untuk melengkapi gambar, gunakan git diff --cached untuk menunjukkan apa yang ada di indeks.
Douglas
apakah git diff melakukan: (index) - (working directory) atau sebaliknya: (working directory) - (index)?
BKSpurgeon
4

Catatan: mulai git 1.8.5 atau 1.9, Q4 2013 :

Ketika pengguna mengetik " git diff" di luar pohon kerja , mengira dia berada di dalam pohon , pesan kesalahan saat ini berupa baris tunggal:

usage: git diff --no-index <path> <path>

mungkin tidak cukup untuk membuatnya menyadari kesalahannya.

Tambahkan " Not a git repository" ke pesan kesalahan saat kami masuk ke --no-indexmode " " tanpa opsi baris perintah eksplisit untuk memerintahkan kami melakukannya.


Lihat:

Klarifikasi dokumentasi untuk " diff --no-index".
Nyatakan bahwa jika tidak berada di dalam repositori, --no-indextersirat dan dua argumen wajib.

Klarifikasi pesan kesalahan dari diff-no-indexuntuk memberi tahu pengguna bahwa CWD tidak ada di dalam repositori dan oleh karena itu dua argumen wajib diisi.

To compare two paths outside a working tree:
usage: git diff --no-index <path> <path>
VonC
sumber
2

Itu tidak melakukan apa-apa jika direktori kerja Anda bersih dan tidak ada perbedaan dari pembaruan terakhir. Coba edit sebuah file dan jalankan git diff lagi, dan itu akan menunjukkan perbedaannya.

Jaanus
sumber
1

Jika Anda menggunakannya di luar repositori atau salinan kerja yang sebenarnya, perilakunya identik dengan GNU diff. Jadi Anda perlu menginformasikan 2 direktori atau file yang akan dibandingkan. Contoh:

git diff old_dir new_dir.

Jika ada perbedaan di antara keduanya, output akan menunjukkan kepada Anda, seperti yang diharapkan.

jweyrich.dll
sumber
0

Tidak dalam kasus Anda, tetapi mungkin karena file yang Anda berikan tidak ada

$ git difftool HEAD HEAD^ -- path/that-not-exists

tidak ada yang terjadi

deFreitas
sumber