Що робить 'винна гіта'?


314

Я бачив багато питань щодо методів використання git blame, але я не дуже їх розумію.

Я бачу Blameкнопку вгорі файлів в інтерфейсі GitHub. Після натискання на ньому відображається деяка різниця з іменами користувачів на лівій панелі. Що це вказує?

Чому git blameнасправді використовується, крім GitHub?


66
Якщо "звинувачувати" теж звучить, винен, ви можете встановити цей сценарій і git praiseзамість цього використовувати :) github.com/ansman/git-praise
Джон Кіпарський

7
Це не повинно бути ні виною, ні похвалами; це по суті припущення і повинно бути об'єктивним.
pdvries

40
git objectively-determine-contributerпросто не має однакового дзвінка до нього.
Рітвік Босе

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.

Тобто, щоб побачити повну історію / журнал рядка документа, вам потрібно буде виконати команду git blame path/to/fileдля кожного комітету у вашому git log.


1
значить, саме для того, щоб побачити останню людину?
Rıfat Erdem Sahin

2
Так, це дозволяє бачити останню людину, яка змінила лінію.
Марк

@Mark Отже, коли ми коментуємо IDE, це внутрішньо робить команду git blame?
Nagarajan Shanmuganathan

2
@NagarajanShanmuganathan так, якщо ви використовуєте git, то саме це відбувається за лаштунками.
Марк

151

Команда досить добре пояснює себе. Це зрозуміти, хто з колег написав конкретний рядок або зіпсував проект, тож ви можете їх звинуватити :)


105
Команда насправді звучить так, ніби ви звинувачуєте когось, виконуючи її. Принаймні так мені звучало, перш ніж я дізнався, що це робив на цій посаді.
Франсіско К.

12
@FranciscoC. ви шукаєте це: github.com/jayphelps/git-blame-someone-else
DustWolf

2
@FranciscoC. зачекайте що, хіба це не так робити, тобто дозволяє звинувачувати когось іншого?
IanDess

16
@IanDess Можливо, це просто семантика, але git blameзвучить так, ніби він мав би якийсь стійкий ефект, подібний до того git commit, де насправді він просто інформує вас про те, які зміни були внесені ким. Це та негативна конотація, яку має слово "звинувачення", роблять команду звучанням як щось, від чого слід триматися подалі, і призводить до таких питань, які шукають роз'яснення.
Франсіско К.

20
Зрозуміло, що це повинно бути названо git praise.
pfnuesel

75

Від GitHub :

Команда звинувачення - це функція Git, покликана допомогти визначити, хто вніс зміни у файл.

Незважаючи на свою негативно звучачу назву, вина у гті насправді досить нешкідлива; його основна функція - вказати, хто змінив рядки у файлі та чому. Це може бути корисним інструментом для визначення змін у вашому коді.

В основному, git-blameвикористовується, щоб показати, яка редакція та автор востаннє змінили кожен рядок файлу. Це як перевірити історію розвитку файлу.


2
Мені це здається зайвим, ви можете побачити різницю між комісіями та ідентифікатором користувача з журналу комісій. Якщо я все розумію тут, у нього менше наполегливості, ніж в історії вчинення. Можливо, мені чогось не вистачає, але здається, що стандарти кодування, що застосовуються через приниження громадськості.
користувач1431356

8
Я здогадуюсь, що назва команди була результатом специфічного почуття гумору Лінуса :) Це не було призначено для того, щоб принижувати кого-небудь :) це був просто смішний (чи ні) вибір для назви корисної команди :)
Младен Б.

2
@ user1431356 - справа в тому, що потрібно перший рядок журналу, який впливає на певний рядок . В іншому випадку вам потрібно буде пошукати журнали для певного рядка. (Це справді життєздатний підхід - дивіться на
довідкових

1
Назва "вини" - це те, що існувало роками до git. Подивіться на реалізацію svn . Це не ім’я, яке дав Лінус Торвальдс.
JackAce

"Я здогадуюсь, що назва команди була результатом специфічного почуття гумору Лінуса :) Це не було призначено для того, щоб принижувати когось :)" хай ... Більше, як це була особистість Лінуса, і це мало принизити когось.
Сінестетик

34

git blameКоманда використовується , щоб знати , хто / що здійснює несе відповідальність за останніх змін , внесених в файл. Автор / фіксація кожного рядка також може бути помічена.

git blame filename (бере на себе відповідальність за зміни всіх рядків у коді)

git blame filename -L 0,10 (бере на себе відповідальність за зміни від рядка "0" до рядка "10")

Існує багато інших варіантів вини, але, як правило, вони можуть допомогти.


2

git blameКоманда позначає рядки з інформацією з перегляду , який останній змінив лінію, і ... з Git 2,22 (Q2 2019), буде робити це швидше , з - за скрутну продуктивність навколо « git blame», особливо в лінійної історії (яка є норма, яку ми повинні оптимізувати для).

Див. Комісію f892014 (02 квітня 2019 р.) Від David Kastrup ( fedelibre) . (Об’єднав Хуніо С Хамано - gitster- у комітеті 4d8c4da , 25 квітня 2019 р.)

blame.c: не кидайте краплі походження так охоче

Коли у батьківського блобу вже є черги, які стоять у черзі за звинувачення, випадання краплі в кінці одного кроку вини спричинить її перезавантаження відразу, подвоївши кількість вводу-виводу та розпакувавшись при обробці лінійної історії.

Збереження таких батьківських крапок у пам'яті здається розумною оптимізацією, яка повинна створювати додатковий тиск пам’яті, головним чином при обробці злиття зі старими гілками.


1

git blameКоманда використовується для перевірки вмісту файлу по рядках та бачити , коли кожен рядок останньої зміни і хто автор змін був.

Якщо в коді була помилка, використовуйте її, щоб визначити, хто її створив, тоді ви можете звинувачувати його. Звинувачується Git.

Якщо вам потрібно знати історію одного кодового рядка, використовуйте git log -S"code here"простіший, ніж звинувачення git.

git log vs git blama

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.