'git blame' ทำอะไรได้บ้าง


314

ฉันเห็นคำถามมากมายเกี่ยวกับวิธีการใช้git blameแต่ฉันไม่เข้าใจจริงๆ

ฉันเห็นBlameปุ่มที่ด้านบนของไฟล์ในส่วนต่อประสาน GitHub เมื่อคลิกแล้วจะมีชื่อผู้ใช้แตกต่างกันที่แถบด้านซ้าย สิ่งนี้บ่งบอกอะไร?

ทำไมgit blameใช้จริงนอกเหนือจาก GitHub


67
หาก "blame" ฟังดูดีเกินไป blamey สำหรับคุณคุณสามารถติดตั้งสคริปต์นี้และใช้git praiseแทน :) github.com/ansman/git-praise
Jon Kiparsky

7
มันจะต้องไม่ถูกตำหนิหรือสรรเสริญ มันเป็นข้อสันนิษฐานโดยเนื้อแท้และน่าจะเป็นไปตามวัตถุประสงค์
pdvries

41
git objectively-determine-contributerไม่ได้มีวงแหวนเดียวกันกับมัน
Ritwik Bose

27
@RitwikBose หรือเพียงแค่git who
aktivb

คำตอบ:


238

จากgit-ตำหนิ :

ใส่คำอธิบายประกอบแต่ละบรรทัดในไฟล์ที่กำหนดพร้อมข้อมูลจากการแก้ไขซึ่งแก้ไขบรรทัดล่าสุด หรือเริ่มเลือกคำอธิบายประกอบจากการแก้ไขที่กำหนด

เมื่อระบุหนึ่งครั้งขึ้นไป -L จำกัด หมายเหตุประกอบให้กับบรรทัดที่ร้องขอ

ตัวอย่าง:

johndoe@server.com:~# 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
...

โปรดทราบว่าgit blameจะไม่แสดงประวัติการแก้ไขต่อบรรทัดตามลำดับเหตุการณ์ HEADมันแสดงให้เห็นว่าใครเป็นคนสุดท้ายที่จะมีการเปลี่ยนแปลงบรรทัดในเอกสารขึ้นไปยังหน้าล่าสุดในการกระทำ

นั่นคือจะบอกว่าในการสั่งซื้อเพื่อดูประวัติ / log ของเส้นเอกสารคุณจะต้องเรียกใช้สำหรับแต่ละกระทำในของคุณgit blame path/to/filegit log


1
ดังนั้นจึงเป็นเพียงเพื่อที่จะเห็นคนสุดท้าย?
Rıfat Erdem Sahin

2
ใช่มันช่วยให้คุณเห็นคนสุดท้ายที่เปลี่ยนสาย
ทำเครื่องหมาย

@ Mark ดังนั้นเมื่อเราใส่คำอธิบายประกอบบน IDE มันจะสร้างคำสั่ง git bl ตำหนิภายในหรือไม่
Nagarajan Shanmuganathan

2
@NagarajanShanmuganathan ใช่ถ้าคุณใช้คอมไพล์นั่นคือสิ่งที่เกิดขึ้นเบื้องหลัง
Mark

152

คำสั่งอธิบายตัวเองค่อนข้างดี มันคือการคิดออกว่าเพื่อนร่วมงานคนใดเขียนบรรทัดที่เฉพาะเจาะจงหรือทำลายโครงการเพื่อให้คุณสามารถตำหนิพวกเขา :)


105
คำสั่งฟังดูเหมือนคุณจะโทษใครบางคนโดยการเรียกใช้ อย่างน้อยนั่นเป็นวิธีที่ฟังฉันก่อนที่ฉันจะเรียนรู้สิ่งที่ทำในโพสต์นี้
Francisco C.

12
@FranciscoC คุณกำลังมองหาสิ่งนี้: github.com/jayphelps/git-blame-someone-else
DustWolf

2
@FranciscoC เดี๋ยวก่อนมันจะไม่ทำอย่างนั้นหรือเปล่าที่จะให้คุณโทษคนอื่น?
IanDess

16
@IanDess บางทีมันอาจเป็นแค่ความหมาย แต่git blameฟังดูเหมือนว่ามันจะมีผลบางอย่างที่คล้ายกันgit commitซึ่งในความเป็นจริงมันแค่แจ้งให้คุณทราบถึงสิ่งที่เปลี่ยนแปลงโดยใคร และความหมายเชิงลบในคำว่า "โทษ" ถือเป็นสิ่งที่ทำให้คำสั่งฟังดูเหมือนสิ่งที่คุณควรหลีกเลี่ยงและนำไปสู่คำถามเช่นนี้ที่ต้องการความกระจ่าง
Francisco C.

20
git praiseเห็นได้ชัดว่ามันควรจะเรียกว่า
pfnuesel

75

จาก GitHub :

คำสั่ง blame เป็นคุณสมบัติของ Git ออกแบบมาเพื่อช่วยให้คุณทราบว่าใครทำการเปลี่ยนแปลงไฟล์

แม้จะมีชื่อที่ทำให้เกิดเสียงไม่ดี แต่ความผิดของคอมไพล์นั้นค่อนข้างไร้เดียงสา ฟังก์ชั่นหลักของมันคือการชี้ให้เห็นว่าใครเปลี่ยนสายในไฟล์และทำไม มันอาจเป็นเครื่องมือที่มีประโยชน์ในการระบุการเปลี่ยนแปลงในรหัสของคุณ

โดยทั่วไปgit-blameจะใช้เพื่อแสดงการแก้ไขและผู้เขียนแก้ไขล่าสุดแต่ละบรรทัดของไฟล์ มันเหมือนกับการตรวจสอบประวัติของการพัฒนาไฟล์


2
ดูเหมือนว่าจะซ้ำซ้อนกับฉันคุณสามารถเห็นความแตกต่างระหว่างการกระทำและ ID ผู้ใช้จากบันทึกการกระทำ ถ้าฉันเข้าใจทุกอย่างที่นี่มันคงอยู่น้อยกว่าประวัติศาสตร์ที่กระทำ บางทีฉันอาจขาดอะไรบางอย่าง แต่ดูเหมือนว่ามาตรฐานการเข้ารหัสบังคับใช้โดยความอัปยศอดสูสาธารณะ
user1431356

8
ฉันเดาว่าชื่อของคำสั่งนั้นเป็นผลมาจากอารมณ์ขันที่เฉพาะเจาะจงของ Linus :) มันไม่ได้หมายความว่าจะถูกนำมาใช้เพื่อทำให้เสียชื่อเสียงใคร :) มันเป็นเพียงตัวตลก (หรือไม่) เลือกชื่อของคำสั่งที่มีประโยชน์ :)
Mladen B.

2
@ user1431356 - ประเด็นคือคุณต้องการให้บรรทัดบันทึกแรกที่มีผลกับบรรทัดใดบรรทัดหนึ่ง มิฉะนั้นคุณจะต้องค้นหาผ่านสตริงเพื่อค้นหาสตริงเฉพาะ (ซึ่งเป็นวิธีการทำงานได้จริง - ดูในหน้าคนสำหรับ "git log -S".)
azernik

1
ชื่อ "ตำหนิ" เป็นสิ่งที่มีมานานหลายปีก่อนคอมไพล์ ดูเพียงแค่ในการดำเนินงานของ SVN มันไม่ใช่ชื่อที่ให้โดย Linus Torvalds
JackAce

"ฉันเดาว่าชื่อของคำสั่งนั้นเป็นผลมาจากอารมณ์ขันที่เฉพาะเจาะจงของ Linus :) มันไม่ได้ถูกใช้เพื่อทำให้คนอื่นรู้สึกละอายใจ :)" ฮ่า ๆ ... เหมือนว่ามันเป็นบุคลิกของ Linus และมันหมายถึง ขายหน้าใครสักคน
Sinaesthetic

34

git blameคำสั่งที่ใช้จะรู้ว่าใคร / ซึ่งกระทำเป็นผู้รับผิดชอบต่อการเปลี่ยนแปลงล่าสุดที่ทำไปยังแฟ้ม ผู้เขียน / กระทำของแต่ละบรรทัดยังสามารถเห็นได้

git blame filename (รับผิดชอบในการเปลี่ยนแปลงบรรทัดทั้งหมดในรหัส)

git blame filename -L 0,10 (รับผิดชอบในการเปลี่ยนแปลงจากบรรทัด "0" เป็นบรรทัด "10")

มีตัวเลือกอื่น ๆ สำหรับการตำหนิ แต่โดยทั่วไปแล้วสิ่งเหล่านี้อาจช่วยได้


2

git blameคำสั่ง annotates เส้นที่มีข้อมูลจากการแก้ไขซึ่งแก้ไขล่าสุดเส้นและ ... กับ Git 2.22 (Q2 2019) จะทำเช่นนั้นได้เร็วขึ้นเพราะการแก้ไขผลการดำเนินงานรอบ " git blame" โดยเฉพาะอย่างยิ่งในประวัติศาสตร์เชิงเส้น (ซึ่งก็คือ บรรทัดฐานเราควรปรับให้เหมาะสมสำหรับ)

ดูกระทำ f892014 (2 เมษายน 2019) โดยเดวิด Kastrup (fedelibre ) (ผสานโดยJunio ​​C Hamano - gitster- in 4d8c4da , 25 เม.ย. 2019)

blame.c: อย่าปล่อย blobs ดั้งเดิมอย่างกระตือรือร้น

เมื่อ Blob หลักมีคิวอยู่แล้วสำหรับการตำหนิการหยด Blob เมื่อสิ้นสุดขั้นตอนการตำหนิหนึ่งครั้งจะทำให้โหลดซ้ำได้ในทันทีเพิ่มจำนวน I / O และคลายออกเมื่อประมวลผลประวัติเชิงเส้น

การทำให้ Blob หลักในหน่วยความจำดูเหมือนจะเป็นการปรับให้เหมาะสมที่เหมาะสมซึ่งจะเกิดแรงกดดันต่อหน่วยความจำเพิ่มเติมส่วนใหญ่เมื่อทำการผสานจากกิ่งเก่า


1

git blameคำสั่งที่ใช้ในการตรวจสอบเนื้อหาของบรรทัดไฟล์โดยสายและเห็นเมื่อแต่ละบรรทัดแก้ไขล่าสุดและผู้ที่ผู้เขียนของการปรับเปลี่ยนเป็น

หากมีข้อบกพร่องในรหัสให้ใช้เพื่อระบุว่าใครใส่ซองไว้คุณสามารถตำหนิเขาได้ การตำหนิ Git ได้รับการตำหนิ (d)

หากคุณจำเป็นต้องรู้ประวัติของรหัสบรรทัดเดียวให้ใช้git log -S"code here"ง่ายกว่าตำหนิคอมไพล์

git log vs git ตำหนิ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.