gpt4 book ai didi

ruby - 我如何使用 Git 来识别存储库不同版本之间的功能更改?

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:36 25 4
gpt4 key购买 nike

我有一个包含一堆 C 文件的存储库。给定两个提交的 SHA 哈希值,

<commit-sha-1><commit-sha-2> ,

我想编写一个脚本(可能是 bash/ruby/python)来检测存储库中 C 文件中的哪些函数在这两次提交中发生了变化。

我目前正在查看 git log 的文档, git commitgit diff .如果有人以前做过类似的事情,你能给我一些关于从哪里开始或如何进行的指示吗?

最佳答案

这看起来不太好,但你可以将 git 与你的最喜欢的标签系统,例如 GNU global 来实现这一点。为了示例:

#!/usr/bin/env sh

global -f main.c | awk '{print $NF}' | cut -d '(' -f1 | while read i
do
if [ $(git log -L:"$i":main.c HEAD^..HEAD | wc -l) -gt 0 ]
then
printf "%s() changed\n" "$i"
else
printf "%s() did not change\n" "$i"
fi
done

首先,您需要在您的项目中创建一个函数数据库:

$ gtags .

然后运行上面的脚本在 main.c 中找到函数自上次提交后修改。剧本当然可以更多灵活,例如,它可以处理 git diff --stats 报告的两次提交之间更改的所有 *.c 文件。

在脚本中我们使用 git log-L 选项:

  -L <start>,<end>:<file>, -L :<funcname>:<file>

Trace the evolution of the line range given by
"<start>,<end>" (or the function name regex <funcname>)
within the <file>. You may not give any pathspec
limiters. This is currently limited to a walk starting from
a single revision, i.e., you may only give zero or one
positive revision arguments. You can specify this option
more than once.

关于ruby - 我如何使用 Git 来识别存储库不同版本之间的功能更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45535461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com