Saya sudah melihat semua pertanyaan serupa. Namun, saya sudah mengecek ulang dan sesuatu yang aneh pasti terjadi.
Pada satu server (Solaris dengan Git 1.8.1) Saya mengkloning repositori Git kemudian menyalin folder .git ke file live saya yang ada. Ini bekerja dengan sempurna, saya bisa berlari
git status
kemudian
git diff [filename]
untuk memeriksa file yang berbeda.
Di server lain (Solaris dengan Git 1.7.6) saya melakukan hal yang persis sama
git diff [filename]
tidak menunjukkan apa-apa, bahkan jika isi file jelas berbeda. Saya juga telah menguji menambahkan file baru, melakukan itu, dan kemudian mengedit. Masalah yang sama, git status
menunjukkan file yang diubah, tetapi git diff
tidak menunjukkan apa-apa. Jika saya mengunduh file yang diubah dan menjalankan diff secara lokal maka saya mendapatkan output diff.
git diff --cached
.git diff --cached
hanya memberi saya output kosong juga.git log
juga tidak memberikan output.core.fileMode
opsi di sini 2) Juga, saya menghadapi masalah serupa dengan konfigurasi Console2 (saya memilikinya di bawah git) ketika Console2 benar-benar berjalan. Mungkin sedikit dari kunci file membuat git ke hal file telah berubah.Jawaban:
Saya menambahkan file ke indeks :
dan kemudian berlari:
Anda dapat melihat deskripsi git diff di sini .
Jika Anda ingin membatalkan git add, silakan lihat di sini: Bagaimana cara membatalkan 'git add' sebelum melakukan?
sumber
Ada beberapa alasan mengapa
git status
mungkin menunjukkan perbedaan tetapigit diff
mungkin tidak.Mode (bit izin) file berubah-- misalnya, dari 777 menjadi 700.
Gaya umpan baris diubah dari CRLF (DOS) ke LF (UNIX)
Cara termudah untuk mengetahui apa yang terjadi adalah menjalankan
git format-patch HEAD^
dan melihat apa yang dikatakan patch yang dihasilkan.sumber
Bagi saya, itu ada hubungannya dengan izin file. Seseorang dengan Mac / Linux di proyek saya tampaknya melakukan beberapa file dengan izin non-standar yang gagal mereproduksi klien Windows git saya. Solusi bagi saya adalah memberi tahu git untuk mengabaikan izin file:
Wawasan lain: Bagaimana cara saya membuat Git mengabaikan file mode (chmod) berubah?
sumber
Saya memiliki masalah ketika ratusan ujung baris dimodifikasi oleh beberapa program dan
git diff
mencantumkan semua file sumber sebagai diubah. Setelah memperbaiki akhir baris,git status
masih terdaftar file yang diubah.Saya bisa memperbaiki masalah ini dengan menambahkan semua file ke indeks dan kemudian mengatur ulang indeks.
core.filemode
disetel ke false.sumber
git add --renormalize .
, lihat jawaban saya di bawah ini.Saya menduga ada sesuatu yang salah dengan instalasi Git Anda atau repositori Anda.
Coba jalankan:
Lihat apakah Anda mendapatkan sesuatu yang bermanfaat. Jika itu tidak membantu, cukup gunakan strace dan lihat apa yang salah:
sumber
-F
bendera keLESS
variabel env yang memberitahu kurang untuk keluar jika ada kurang dari satu layar penuh dengan informasi untuk ditampilkan. Karena git menggunakan lebih sedikit sebagai pager, dan saya memiliki sedikit perbedaan, tidak ada yang ditampilkan. Entah saya harus menambahkan-X
keLESS
env yang menunjukkan konten di layar bahkan setelah keluar lebih sedikit atau hanya menghapus-F
.GIT_TRACE
menunjukkan bahwaless
sedang dieksekusi yang mengingatkan saya bahwa saya mengubahLESS
variabel baru-baru ini. Alasan yang sama dalam jawaban @ rcwxok, tetapi ingin mengomentari betapaGIT_TRACE
membantu.core.pager
di.gitconfig
, yang bekerja dengan sempurna untuk saya.Saya memiliki masalah yang sama:
git diff
akan menunjukkan perbedaan, tetapigit diff <filename>
tidak. Ternyata saya mengaturLESS
ke string termasuk-F
(--quit-if-one-screen
). Menghapus bendera itu memecahkan masalah.sumber
-F
, menambahkan-X
mungkin juga berfungsi, lihat jawaban saya di bawah untuk kasus serupa.Seperti yang sudah disebutkan dalam jawaban sebelumnya , situasi ini mungkin timbul karena masalah akhir baris (CR / LF vs LF). Saya memecahkan masalah ini (di bawah Git versi 2.22.0) dengan perintah ini:
Menurut manual:
sumber
Jawaban singkat
Berlari
git add
terkadang membantu.Contoh
Status git menunjukkan file yang diubah dan git diff tidak menunjukkan apa-apa ...
... menjalankan git add menyelesaikan ketidakkonsistenan.
sumber
status
dandiff
memiliki cara terpisah untuk menangani itu.Saya mengalami masalah ini. Kasus saya adalah mirip dengan yang
LESS
masalah diposting oleh rcwxok .Dalam kasus saya, saya mengatur
PAGER
variabel lingkungan kePAGER='less -RSF'
.Namun, tidak seperti jawaban sebelumnya, saya tidak ingin menghapus
-F
opsi, karena saya secara eksplisit meletakkannya di sana berharap untuk mencegah menampilkan diffless
jika itu lebih pendek daripada screenful.Untuk mendapatkan hasil yang diinginkan, bukan menghapusnya
-F
, saya menambahkan-X
:PAGER='less -RSFX'
. Ini keduanya memecahkangit diff
masalah dan juga mencegah menampilkan perbedaan pendekless
.sumber
Saya baru saja menjalankan masalah serupa.
git diff file
tidak menunjukkan apa-apa karena saya menambahkan file ke indeks Git dengan beberapa bagian namanya dalam huruf besar:GeoJSONContainer.js
.Setelah itu, saya menamainya menjadi
GeoJsonContainer.js
dan perubahan berhenti dilacak.git diff GeoJsonContainer.js
tidak menunjukkan apa-apa. Saya harus menghapus file dari indeks dengan flag kekuatan, dan menambahkan file lagi:sumber
Anda tidak benar-benar mengajukan pertanyaan yang sebenarnya, tetapi karena ini adalah kasus penggunaan umum, saya cukup sering menggunakan inilah yang saya lakukan. Anda dapat mencoba ini sendiri dan melihat apakah kesalahan berlanjut.
Asumsi saya tentang kasus penggunaan Anda:
Anda memiliki direktori yang sudah ada yang berisi file dan direktori dan sekarang ingin mengubahnya menjadi repositori Git yang dikloning dari tempat lain tanpa mengubah data apa pun di direktori Anda saat ini.
Sebenarnya ada dua cara.
Clone repo - mv
.git
- git reset --hardMetode ini adalah apa yang Anda lakukan - untuk mengkloning repositori yang ada ke direktori kosong, lalu memindahkan
.git
direktori ke direktori tujuan. Untuk bekerja tanpa masalah, ini biasanya mengharuskan Anda untuk menjalankannyaNamun, itu akan mengubah status file di direktori Anda saat ini. Anda dapat mencoba ini pada salinan lengkap / rsync dari direktori Anda dan pelajari perubahannya. Setidaknya setelah itu Anda tidak akan lagi melihat perbedaan antara
git log
danstatus
.Dapatkan repositori baru - arahkan ke asal
Yang kedua kurang mengganggu:
cd
ke tujuan Anda, dan mulai repositori baru denganKemudian Anda memberi tahu repositori baru itu, bahwa ia memiliki leluhur di tempat lain:
Maka aman
untuk menyalin data tanpa mengubah file lokal Anda. Semuanya harus baik-baik saja sekarang.
Saya selalu merekomendasikan cara kedua agar tidak terlalu rentan kesalahan.
sumber
.git
folder ke area kerja lain, kita berpotensi melanggar asumsi git. Jika ini mengakibatkan perilaku tidak menentu yang tidak bisa kita menyalahkan git, kita harus menyalahkan diri sendiri karena bermain trik dengan git. git menyediakan cara untuk memperbaikinya, misreset --hard
. Hanya saja bukan itu yang kita inginkan. Inilah alasan mengapainit/remote add
cara ini direkomendasikan, dan semuanya baik-baik saja.remote add
cara melakukan sesuatu masih dapat diterapkan pada situasi yang kacau seperti yang dijelaskan oleh Oliver PSaya menemukan masalah ini lagi. Tetapi kali ini terjadi karena alasan yang berbeda. Saya telah menyalin file ke repo untuk menimpa versi sebelumnya. Sekarang saya dapat melihat file-file tersebut dimodifikasi tetapi diff tidak mengembalikan diff.
Sebagai contoh, saya memiliki file mainpage.xaml. Di File Explorer saya menempelkan file mainpage.xaml baru di atas yang ada di repo saya saat ini. Saya melakukan pekerjaan di komputer lain dan hanya menempelkan file di sini.
File menunjukkan dimodifikasi, tetapi ketika saya menjalankan git diff, itu tidak akan menampilkan perubahan. Itu mungkin karena fileinfo pada file telah berubah dan git tahu bahwa itu sebenarnya bukan file yang sama. Menarik.
Anda dapat melihat bahwa ketika saya menjalankan diff pada file itu tidak menunjukkan apa-apa, hanya mengembalikan prompt.
sumber
Saya memiliki masalah yang sama dijelaskan dengan cara berikut: Jika saya mengetik
Git hanya kembali ke prompt tanpa kesalahan.
Jika saya mengetik
Git hanya kembali ke prompt tanpa kesalahan.
Akhirnya, dengan membaca sekitar saya perhatikan bahwa
git diff
sebenarnya memanggilmingw64\bin\diff.exe
untuk melakukan pekerjaan.Ini kesepakatannya. Saya menjalankan Windows dan telah menginstal utilitas Bash lain dan itu mengubah jalur saya sehingga tidak lagi menunjuk ke direktori mingw64 \ bin saya .
Jadi, jika Anda mengetik:
dan itu hanya kembali ke prompt Anda mungkin memiliki masalah ini.
Akhirnya, untuk memperbaikinya, saya benar-benar menyalin
mingw64\bin
direktori saya ke lokasi yang dicari Git. Saya mencobanya dan masih tidak berhasil.Kemudian, saya menutup jendela Git Bash saya dan membukanya lagi pergi ke repositori yang sama yang gagal dan sekarang berfungsi.
sumber