Apa yang 'git salahkan' lakukan?

314

Saya melihat banyak pertanyaan tentang metode penggunaan git blame, tetapi saya tidak begitu memahaminya.

Saya melihat Blametombol di atas file pada antarmuka GitHub. Setelah mengkliknya, ini menunjukkan beberapa perbedaan dengan nama pengguna di bilah kiri. Apa artinya itu?

Mengapa git blamesebenarnya digunakan, terlepas dari GitHub?

Himanshu Mishra
sumber
67
Jika "menyalahkan" juga terdengar, salahkan untuk Anda, Anda dapat menginstal skrip ini dan menggunakan git praisegantinya :) github.com/ansman/git-praise
Jon Kiparsky
7
Seharusnya tidak menyalahkan, atau memuji; itu secara inheren bersifat asumsi dan seharusnya objektif.
pdvries
41
git objectively-determine-contributerhanya tidak memiliki cincin yang sama dengannya.
Ritwik Bose
27
@RitwikBose atau hanyagit who
aktivb

Jawaban:

238

Dari git-menyalahkan :

Membuat anotasi setiap baris dalam file yang diberikan dengan informasi dari revisi yang terakhir memodifikasi baris. Secara opsional, mulai anotasi dari revisi yang diberikan.

Ketika ditentukan satu kali atau lebih, -L membatasi anotasi ke baris yang diminta.

Contoh:

[email protected]:~# git blame .htaccess
...
^e1fb2d7 (John Doe 2015-07-03 06:30:25 -0300  4) allow from all
^72fgsdl (Arthur King 2015-07-03 06:34:12 -0300  5)
^e1fb2d7 (John Doe 2015-07-03 06:30:25 -0300  6) <IfModule mod_rewrite.c>
^72fgsdl (Arthur King 2015-07-03 06:34:12 -0300  7)     RewriteEngine On
...

Harap dicatat bahwa git blametidak menunjukkan riwayat modifikasi per-line dalam arti kronologis. Ini hanya menunjukkan siapa orang terakhir yang mengubah baris dalam dokumen hingga komit terakhir HEAD.

Dengan kata lain, untuk melihat riwayat lengkap / log dari baris dokumen, Anda perlu menjalankan git blame path/to/fileuntuk setiap komit di git log.

Menandai
sumber
1
jadi hanya untuk melihat orang terakhir?
Rıfat Erdem Sahin
2
Ya, ini memungkinkan Anda untuk melihat orang terakhir yang mengubah saluran.
Tandai
@ Mark Jadi ketika kita membuat anotasi pada IDE, itu secara internal membuat perintah git menyalahkan?
Nagarajan Shanmuganathan
2
@NagarajanShanmuganathan ya, jika Anda menggunakan git maka itulah yang terjadi di balik layar.
Tandai
153

Perintah itu menjelaskan dirinya dengan cukup baik. Ini untuk mencari tahu rekan kerja mana yang menulis baris tertentu atau merusak proyek, sehingga Anda dapat menyalahkan mereka :)

XRay
sumber
105
Perintah itu sebenarnya terdengar seperti Anda akan menyalahkan seseorang dengan menjalankannya. Setidaknya itulah yang terdengar bagi saya sebelum saya mengetahui apa yang dilakukannya di pos ini.
Francisco C.
12
@FranciscoC. Anda sedang mencari ini: github.com/jayphelps/git-blame-someone-else
DustWolf
2
@FranciscoC. tunggu apa, bukankah itu agak melakukan hal yang membuat Anda menyalahkan orang lain?
IanDess
16
@IanDess Mungkin itu hanya semantik, tetapi git blameterdengar seolah-olah itu akan memiliki beberapa efek yang bertahan, mirip dengan git commit, di mana sebenarnya itu hanya memberitahu Anda tentang perubahan apa yang dilakukan oleh siapa. Itu dan konotasi negatif yang dibawa kata "menyalahkan", membuat perintah itu terdengar seperti sesuatu yang harus Anda hindari dan mengarah ke pertanyaan seperti ini yang mencari klarifikasi.
Francisco C.
20
Jelas, itu harus dipanggil git praise.
pfnuesel
75

Dari GitHub :

Perintah menyalahkan adalah fitur Git, yang dirancang untuk membantu Anda menentukan siapa yang membuat perubahan pada file.

Terlepas dari namanya yang terdengar negatif, kesalahan git sebenarnya cukup tidak berbahaya; fungsi utamanya adalah untuk menunjukkan siapa yang mengubah baris mana dalam file, dan mengapa. Ini bisa menjadi alat yang berguna untuk mengidentifikasi perubahan dalam kode Anda.

Pada dasarnya, git-blamedigunakan untuk menunjukkan revisi apa dan penulis terakhir memodifikasi setiap baris file. Ini seperti memeriksa sejarah pengembangan file.

Himanshu Mishra
sumber
2
Ini sepertinya berlebihan bagi saya, Anda dapat melihat perbedaan antara komit dan ID pengguna dari log komit. Jika saya memahami semuanya di sini, itu memiliki ketekunan kurang dari sejarah komit. Mungkin saya melewatkan sesuatu, tetapi sepertinya standar pengkodean ditegakkan melalui penghinaan publik.
user1431356
8
Saya kira nama perintah itu adalah hasil dari selera humor khusus Linus :) Itu tidak dimaksudkan untuk digunakan untuk mempermalukan siapa pun :) itu hanya pilihan lucu (atau tidak) untuk nama perintah yang berguna :)
Mladen B.
2
@ user1431356 - intinya adalah Anda menginginkan baris log pertama yang memengaruhi baris tertentu . Kalau tidak, Anda harus mencari log untuk string tertentu. (Yang memang merupakan pendekatan yang layak - lihat di halaman manual untuk "git log -S".)
azernik
1
Gelar "menyalahkan" adalah sesuatu yang telah ada selama bertahun-tahun sebelum git. Lihat saja implementasi svn . Itu bukan nama yang diberikan oleh Linus Torvalds.
JackAce
"Kurasa nama perintah itu adalah hasil dari selera humor khusus Linus :) Itu tidak dimaksudkan untuk digunakan untuk mempermalukan siapa pun :)" lol ... Lebih tepatnya itu adalah kepribadian Linus dan itu dimaksudkan untuk mempermalukan seseorang.
Sinaesthetic
34

The git blamePerintah ini digunakan untuk mengetahui siapa / yang komit bertanggung jawab untuk perubahan terbaru dibuat untuk sebuah file. Penulis / komit setiap baris juga dapat dilihat.

git blame filename (berkomitmen bertanggung jawab atas perubahan untuk semua baris dalam kode)

git blame filename -L 0,10 (berkomitmen bertanggung jawab atas perubahan dari baris "0" ke baris "10")

Ada banyak pilihan lain untuk disalahkan, tetapi umumnya ini bisa membantu.

Bharath TS
sumber
2

The git blameperintah menambahkan catatan baris dengan informasi dari revisi yang terakhir diubah garis, dan ... dengan Git 2.22 (Q2 2019), akan melakukannya lebih cepat , karena perbaikan kinerja di sekitar " git blame", terutama dalam sejarah linear (yang merupakan norma kita harus mengoptimalkan untuk).

Lihat komit f892014 (02 Apr 2019) oleh David Kastrup ( fedelibre) . (Digabung oleh Junio ​​C Hamano - gitster- dalam komit 4d8c4da , 25 Apr 2019)

blame.c: jangan menjatuhkan gumpalan asal dengan penuh semangat

Ketika gumpalan induk sudah memiliki antrian untuk menyalahkan, menjatuhkan gumpalan pada akhir satu langkah menyalahkan akan membuatnya dimuat kembali segera, menggandakan jumlah I / O dan membongkar saat memproses riwayat linier.

Mempertahankan gumpalan induk seperti itu dalam memori tampaknya merupakan pengoptimalan yang masuk akal yang seharusnya menimbulkan tekanan memori tambahan sebagian besar saat memproses penggabungan dari cabang lama.

VONC
sumber
1

The git blamePerintah ini digunakan untuk memeriksa isi dari file baris demi baris dan melihat ketika setiap baris terakhir diubah dan yang penulis modifikasi itu.

Jika ada bug dalam kode, gunakan untuk mengidentifikasi siapa yang membuatnya, maka Anda bisa menyalahkannya. Git menyalahkan adalah disalahkan (d).

Jika Anda perlu mengetahui sejarah satu kode baris, gunakan git log -S"code here", lebih sederhana daripada git menyalahkan.

log git vs git menyalahkan

JackChouMine
sumber