Git menyalahkan tidak menunjukkan sejarah

88

Ketika saya menjalankan git menyalahkan pada file (menggunakan msysgit) saya selalu mendapatkan jenis cetakan berikut:

00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   1) package co
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   2) {
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   3)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   4)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   5)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   6)      impor
00000000 (Not Committed Yet 2011-01-09 11:21:30 +0200   7)      impor

yaitu menampilkan semua baris sebagai Belum Berkomitmen.

Saya mencoba ini pada banyak file, yang memiliki banyak komit - selalu hasilnya sama. Saya juga mencoba menggunakan jalur relatif / lengkap, tetapi tampaknya tidak ada bedanya.

Ketika saya mencoba menggunakan kesalahan TortoiseGit, itu selalu menunjukkan setiap baris sebagai yang terakhir dikomit pada komit pertama:

teks alt

bahkan berpikir, seperti yang saya katakan, sebenarnya ada puluhan komit dalam sejarah file ini ..

Ide ide?

Edit - Info Lebih Lanjut

  • Git menyalahkan berfungsi dengan baik di GitHub, tempat repo ini di-host.
  • Ini juga berfungsi dengan baik jika saya mengkloningnya ke mesin linux dan melakukan kesalahan di sana
  • Tampaknya hanya pada msysgit ini tidak berfungsi
Assaf Lavie
sumber
Bagi saya, masalah ini diakibatkan oleh penggunaan jalur yang dihubungkan dengan jalur yang dikenali oleh repositori, jadi menurutnya file tersebut benar-benar baru.
Kzqai
Catatan: Mulai git 2.0.1 (25 Juni 2014), git menyalahkan harus berhenti melaporkan semua baris "Belum Berkomitmen". Lihat jawaban saya di bawah
VonC
Di milis: git.661346.n2.nabble.com/… Juga terjadi di Linux.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Ini juga memengaruhi WSL, jadi saya telah menambahkan tag. Semoga tidak apa-apa.
mikemaccana

Jawaban:

127

git blame file.txtmenyalahkan versi file.txt dalam copy pekerjaan Anda. Jika file.txt memiliki Windows-newlines (CRLF) di repo dan Anda punya core.autocrlf = true, maka setiap baris file.txt akan dianggap berbeda dan akan dilaporkan olehgit blame sebagai belum dikomit.

Alasan mengapa git blame <my_branch>(atau bahkan lebih baik git blame HEAD, yang berfungsi di cabang mana pun Anda berada) berfungsi, adalah karena itu tidak menyalahkan versi copy pekerjaan sehingga tidak ada potensi baris yang belum dikomit.

kusma
sumber
118
git blame -wmengabaikan spasi, jadi Anda masih bisa menyalahkan copy pekerjaan jika diinginkan
Kyle Heironimus
13
Git menyalahkan -w harus menjadi jawaban terpisah dan yang diterima;). Jawaban yang diterima tanpa komentar tidak berguna bagi saya.
Guillaume Perrot
55

Menemukan solusinya - sangat aneh.

Jika saya menjalankan ini:

git blame file.txt

Sejarahnya rusak, seperti yang diposting di atas.

Jika saya melakukan ini sebagai gantinya:

git blame my_branch file.txt

Berhasil!

Ini sangat aneh, karena AFAICS penggunaan tidak memerlukan nama cabang:

$ git blame
usage: git blame [options] [rev-opts] [rev] [--] file
Assaf Lavie
sumber
7
Ini berfungsi untuk saya, terima kasih telah mempostingnya. Anda harus menandai yang ini sebagai jawaban IMO.
wes
Ini berfungsi untuk saya di msysgit tetapi nama file peka huruf besar kecil. Jadi saya bisa menulis git blame mybranch cmakelists.txtdan itu akan gagal; tetapi jika saya menulis git blame mybranch CMakeLists.txtitu akan berhasil.
putaran
Saya setuju, wes; kesalahan tidak menunjukkan sejarah sampai saya menentukan cabang, dan itu tidak sesuai dengan dokumentasi.
josephdpurcell
OMG, menyalahkan sudah rusak.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
8

Mulai git 2.0.1 (25 Juni 2014), git menyalahkan harus berhenti melaporkan semua baris "Belum Berkomitmen".

Lihat commit 4d4813a (26 Apr 2014) oleh brian m. carlson ( bk2204) .
(Digabung oleh Junio ​​C Hamano - gitster- di commit e934c67 , 06 Jun 2014)

blame: menangani file dengan benar apa pun autocrlf

Jika file berisi CRLFakhiran baris dalam repositori dengan core.autocrlf=input, maka selalu menyalahkan baris yang ditandai sebagai " Not Committed Yet", bahkan jika baris itu tidak dimodifikasi.
Jangan mencoba mengubah akhir baris saat membuat komit palsu sehingga kesalahan berfungsi dengan benar terlepas dari autocrlfpengaturannya.

VonC
sumber
8
Saya masih memiliki masalah di git v2.1.3
DBedrenko
Saya memiliki masalah dengan git versi 2.16.1.windows.1
Radon8472
@ Radon8472 Dapatkah Anda menambahkan pertanyaan baru yang mengilustrasikan masalah, dengan git config -lkeluaran Anda (dan tautan kembali ke jawaban ini): yang memungkinkan saya dan orang lain untuk mencoba dan melihat apakah masalah tetap ada.
VonC
1

Kemungkinan lain: salah ketik nama file yang case-sensitive

Saya memiliki masalah yang sama dengan git menyalahkan file.txt, kemudian menyadari bahwa saya telah membuat kesalahan ketik nama file yang peka huruf besar kecil dengan file.txt

Mengubahnya menjadi File.txt (misalnya), dan saya mendapatkan hasil yang diharapkan tanpa harus menentukan my_branch: git menyalahkan File.txt

John Jacecko
sumber