使用 git 查找文本块的所有更改

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

我有一个文本文件,我想用它来跟踪更改。它是一个存储值(以及字符串和数组)的文件,其条目具有以下格式:

NAME: some_name
  UNIT: some_unit
  ...
  VALUE: 10
  ...
END

我已经设置了一个存储库来跟踪此文件的更改,但现在我想了解像

some_name
这样的条目的更改历史记录。

我认为这类似于了解功能的更改历史记录,用户希望了解整个功能在各个修订之间的历史记录。

我已经尝试过here描述的方法,并进行了多次尝试,例如:

git log -L '\bsome_name\b', '\bEND\b':config.txt

fatal: invalid object name '\bEND\b'.

也来自这里我已经尝试过:

git log -p | grep '(\bsome_name\b)(.|\s)*?(\bEND\b)'

...什么也不返回。

更新20240818: 进一步的尝试:

  • 定义了一个自定义的块头并尝试使用
    git log -L:some_name:config.txt
    。 这确实适用于某些条目,但找不到其他条目,类似于
    git log -L'/some_name/','/END/':config.txt
  • 使用
    git log -p -W >> test.txt
    我可以手动检查输出并查看上述方法未找到的条目确实存在。

@phd 提供的答案应该有效,但它忽略了一些条目。

git git-log posix-bre
2个回答
2
投票

在当前签出的文件中查找要查看的文本块的第一行和最后一行的行号。然后:

git log -L123,157:config.txt

(显然,用您找到的数字替换这些数字。)请注意,命令行参数中没有空格。


1
投票

语法是

git log -L/start_re/,/end_re/:file
,里面没有空格。 Git 使用 POSIX regex 语法,不支持
\b
字边界。试试这个:

git log -L'/some_name/','/END/':config.txt
© www.soinside.com 2019 - 2024. All rights reserved.