如何获取为提交更改和添加的行号

问题描述 投票:0回答:1

我想通过 bash 脚本在一次提交中获取文件的修改行号。

我搜索了很多并得到了这样的脚本:

git diff --unified=0 HEAD origin/develop .gitlab-ci.yml | grep -Po '^\+\+\+ ./\K.*|^@@ -[0-9]+(,[0-9]+)? \+\K[0-9]+(,[0-9]+)?(?= @@)'

但是这个脚本只显示修改的行号,不显示添加的行。有谁知道该怎么做吗?

示例: 本地 .gitlab-ci.yml 文件:

a
b
c

远程开发分支:

a
k

脚本应该输出2和3。因为第2行被更改并添加了新行“c”,所以行号是3,所以它应该输出2和3。

bash git
1个回答
0
投票

前言

您首先要求对单个提交进行修改,而稍后的问题会要求与远程分支进行比较,远程分支可以是从零到无限数量的提交。

您还询问更改行,但是任何计算机程序都不可能确定

解决方案

话虽如此,这就是我认为您所要求的。如果只是在一次提交中进行更改,您可以使用

git blame $THE_COMMIT -- filename
,然后仅过滤掉具有
$THE_COMMIT
sha 值的行。责怪行直接包含行号,因此下一步只需提取该行号。

为了比较多个提交,

git blame
不起作用,但是存在一个
git diff-blame
工具,它可以按照名称所示操作,并且可以以相同的方式使用,尽管您想使用
downstream分支我的 fork 让它不会在管道中打印 ansi 颜色格式并支持比较单个文件。

# NB, the -- before the file name is mandatory.
git diff-blame HEAD origin/develop -- .gitlab-ci.yml \
    | grep '^ [+-]' \
    | cut -d ')' -f1 \
    | rev \
    | awk '{print $1}' \
    | rev
# Assuming no ")" in the author name.
© www.soinside.com 2019 - 2024. All rights reserved.