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

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: не роняйте оригинальные блобы

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

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

VonC
источник
1

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

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

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

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

JackChouMine
источник