Как получить исходные номера строк в определенной ревизии файла? - PullRequest
0 голосов
/ 01 января 2019

Можно увидеть источник / оригинал номера строк строк с git blame Но он показывает номера строк в соответствии с последним коммитом, который произвел изменение в строке

Я хочу сделать то же самое для определенного коммита / ревизии файла.

Пример,

Файл: file.ext ( xyz11 - это ревизия / фиксация файла, который мы сейчас просматриваем)

Содержимое:

Line 1 (**abc11** is the last commit changed this line)
Line 2 (**abc12** is the last commit changed this line)
Line 3 (**abc13** is the last commit changed this line)

Я хочу получить "3" для «Линия 3» .Git blame покажет эту информацию в соответствии с коммитом line (abc13) commit.Но, поскольку xyz11 и abc13 ревизии содержат различное содержимое, фактический номер строки в xyz11 может отличаться.

Так как я могу получитьНомера строк в определенной ревизии файла?

Примечание. Я сказал «исходный / исходный номер строки» Поскольку я хочу получить правильные номера строк, даже если документ загрязнен (имеет незафиксированные изменения) Это возможно с git blame

Мой сценарий состоит в том, что я буду использовать эти номера строк в запросе API для добавления встроенных комментариев

Итак, предположим, что я изменил file.ext

Line 1
Line 2
Uncommited Line 
Uncommited Line
Line 3

Я должен получить еще "3" для "Строка 3" вместо "5" , иначе комментарий будет неправильнымлиния.Как я уже сказал, это возможно с git blame, но он показывает эту информацию в соответствии с коммитом строки

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Существует опция rev для git blame , поэтому вы можете указать коммит / ревизию, которую хотите обвинить:

git blame <rev> file

Пример

git blame xyz11 file.txt

Больше информации в документах

0 голосов
/ 01 января 2019

Если я вас правильно понял, у вас есть файл с незафиксированными изменениями, и ваш git blame выглядит следующим образом.

$ git blame foo

^592c0a1 (Michael G. Schwern 2019-01-01 12:56:35 -0800 1) Line 1
^592c0a1 (Michael G. Schwern 2019-01-01 12:56:35 -0800 2) Line 2
00000000 (Not Committed Yet  2019-01-01 12:58:04 -0800 3) Uncommitted Line
00000000 (Not Committed Yet  2019-01-01 12:58:04 -0800 4) Uncommitted Line
^592c0a1 (Michael G. Schwern 2019-01-01 12:56:35 -0800 5) Line 3

Используйте -n, чтобы показать, какая строка в исходном коммите.

$ git blame -n foo

^592c0a1 1 (Michael G. Schwern 2019-01-01 12:56:35 -0800 1) Line 1
^592c0a1 2 (Michael G. Schwern 2019-01-01 12:56:35 -0800 2) Line 2
00000000 3 (Not Committed Yet  2019-01-01 12:58:47 -0800 3) Uncommitted Line
00000000 4 (Not Committed Yet  2019-01-01 12:58:47 -0800 4) Uncommitted Line
^592c0a1 3 (Michael G. Schwern 2019-01-01 12:56:35 -0800 5) Line 3

Чтобы игнорировать все неподтвержденные и неподписанные изменения, используйте git blame <file> HEAD.HEAD - последний коммит.Это будет искать все изменения в файле от HEAD в обратном направлении.Поскольку из-за промежуточных коммитов также будут выбрасываться номера строк, вам все равно нужно, чтобы -n получил номер строки в этом коммите.Например.

$ git blame -n foo

^592c0a1 1 (Michael G. Schwern 2019-01-01 12:56:35 -0800 1) Line 1
^592c0a1 2 (Michael G. Schwern 2019-01-01 12:56:35 -0800 2) Line 2
00000000 3 (Not Committed Yet  2019-01-01 13:03:06 -0800 3) Uncommitted line
4a87d48f 3 (Michael G. Schwern 2019-01-01 13:02:32 -0800 4) Line 2.5
^592c0a1 3 (Michael G. Schwern 2019-01-01 12:56:35 -0800 5) Line 3

$ git blame -n foo HEAD

^592c0a1 1 (Michael G. Schwern 2019-01-01 12:56:35 -0800 1) Line 1
^592c0a1 2 (Michael G. Schwern 2019-01-01 12:56:35 -0800 2) Line 2
4a87d48f 3 (Michael G. Schwern 2019-01-01 13:02:32 -0800 3) Line 2.5
^592c0a1 3 (Michael G. Schwern 2019-01-01 12:56:35 -0800 4) Line 3
...