Что делает "мерзавец"?


314

Я видел много вопросов о методах использования git blame, но я не совсем их понимаю.

Я вижу Blameкнопку поверх файлов на интерфейсе GitHub. При нажатии на него, он показывает некоторые различия с именами пользователей на левой панели. Что это означает?

Почему на git blameсамом деле используется, кроме GitHub?


67
Если «вина» звучит слишком, ну, вину за вас, вы можете установить этот сценарий и использовать git praiseвместо него :) github.com/ansman/git-praise
— Джон Кипарски

7
Не должно быть ни вины, ни похвалы; это изначально предположительно и должно было быть объективным.
— pdvries

41
git objectively-determine-contributerпросто нет такого же звонка.
— Ритвик Бозе

27
@RitwikBose или простоgit who
— aktivb

Ответы:


238

Из мерзавца :

Аннотирует каждую строку в данном файле информацией из ревизии, которая последний раз модифицировала строку. По желанию, начните комментировать с данной ревизии.

Если указано один или несколько раз, -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
так что это просто для того, чтобы увидеть последнего человека?
— Рифат Эрдем Сахин

2
Да, это позволяет увидеть последнего человека, который изменил линию.
— Mark

@Mark. Итак, когда мы аннотируем среду IDE, она выполняет внутреннюю команду git blame?
— Нагараджан

2
@NagarajanShanmuganathan да, если вы используете git, то это то, что происходит за кулисами.
— Марк

153

Команда объясняет себя довольно хорошо. Это чтобы выяснить, какой сотрудник написал конкретную строку или разрушил проект, чтобы вы могли их винить :)


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 :

Команда blame - это функция Git, разработанная, чтобы помочь вам определить, кто внес изменения в файл.

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

В основном, git-blameиспользуется, чтобы показать, какая ревизия и автор последней изменили каждую строку файла. Это похоже на проверку истории разработки файла.


2
Это кажется мне излишним, вы можете увидеть разницу между коммитами и ID пользователя из журнала коммитов. Если я здесь все понимаю, у него меньше настойчивости, чем у истории коммитов. Может быть, я что-то упускаю, но похоже, что стандарты кодирования применяются путем публичного унижения.
— user1431356

8
Я предполагаю, что название команды было результатом особого чувства юмора Линуса :) Это не было предназначено, чтобы использоваться, чтобы унизить кого-либо :) это был просто забавный (или нет) выбор названия полезной команды :)
— Младен Б.

2
@ user1431356 - дело в том, что вы хотите первую строку журнала, которая влияет на конкретную строку . В противном случае вам придется искать в журналах определенную строку. (Это действительно жизнеспособный подход - поищите на страницах
— справочника

1
Название «вина» это то, что существовало в течение многих лет до мерзавца. Просто посмотрите на реализацию SVN . Это не было имя, данное Линусом Торвальдсом.
— JackAce

«Я думаю, что название команды было результатом особого чувства юмора Линуса :) Это не должно было использоваться, чтобы унизить кого-либо :)» LOL ... Больше похоже, что это была личность Линуса, и это БЫЛО предназначено для унизить кого-то.
— Синастетик

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) Дэвида Каструпа ( fedelibre) . (Объединено Junio ​​C Hamano - gitster- в коммите 4d8c4da , 25 апреля 2019 г.)

blame.c: не роняйте оригинальные блобы

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

Хранение таких родительских больших двоичных объектов в памяти кажется разумной оптимизацией, которая должна вызывать дополнительную нагрузку на память в основном при обработке слияний из старых веток.


1

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

Если в коде была ошибка, используйте ее, чтобы определить, кто ее вызвал, и вы можете обвинить его. Вина Гит - это вина (d).

Если вам нужно знать историю однострочного кода, используйте git log -S"code here", проще, чем git blame.

Git Log против Git вины

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.