我有一堆包含大量C文件的存储库。给定两次提交的SHA哈希值,
<commit-sha-1>
和<commit-sha-2>
,
我想写一个脚本(可能是bash / ruby / python)来检测存储库中C文件中哪些函数在这两个提交中发生了变化。
我目前正在查看git log,git commit和git diff的文档。如果有人之前做过类似的事情,你能否给我一些关于从哪里开始或如何继续的建议。
答案 0 :(得分:2)
这看起来不太好,但你可以将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
中的函数
自上次提交后修改。脚本当然可以更多
灵活,例如它可以处理由*.c
报告的2次提交之间更改的所有git diff --stats
个文件。
在脚本中,我们使用-L
的{{1}}选项:
git log
答案 1 :(得分:0)
请参阅this question。
Bash脚本:
#!/usr/bin/env bash
git diff | \
grep -E '^(@@)' | \
grep '(' | \
sed 's/@@.*@@//' | \
sed 's/(.*//' | \
sed 's/\*//' | \
awk '{print $NF}' | \
uniq
说明:
1:获得差异
2:只获取带有hunk标题的行;如果“可选”部分标题为&#39;存在一个Hunk头,它将是修改函数的函数定义
3:只选择包含开括号的hunk标题,因为它们将包含函数定义
4:摆脱&#39; @@ [old-file-range] [new-file-range] @@&#39;行中的部分
5:打开括号后摆脱一切
6:摆脱&#39; *&#39;来自指针
7:[见&#39; awk&#39;]:打印记录的最后一个字段(即:列)。(
)。 8:摆脱重复的名字。