bash - 从 git 日志创建报告
问题描述
梦想是创建一个脚本来运行我的存储库并创建一个报告。我希望报告包含存储库、它们的子模块、与每个 repo 关联的合并 PR 以及这些 PR 的更新文件列表。这将在 master 上的两个给定日期之间产生。我一直在看这样的东西(其中哈希代表第一天的第一次合并和另一天的最后一次合并):
git log --format='%h - %s' --stat a123456...c123456 > report
我遇到的问题之一——我不确定这是否可以用 git 完成,或者事后处理报告是否更好——目前这会带回太多信息。也就是说,我得到了每个 PR 涉及的所有文件的列表。我真正想要的是一个精简列表,其中仅列出给定文件的最新更新。目前我得到这样的东西:
c123456 - 这是第三次合并 (#3) ../file4
b123456 - 这是第二次合并 (#2) ../file1 ../file3
../file4a123456 - 这是第一次合并 (#1) ../file1 ../file2
../file3 ../file4
我真正想要的是这样的:c123456 - 这是第三次合并 (#3) ../file4
b123456 - 这是第二次合并 (#2) ../file1 ../file3
a123456 - 这是第一次合并 (#1) ../file2
任何帮助,将不胜感激!
解决方案
awk
救援!
$ awk -v RS= -F'\n' '{for(i=1;i<=NF;i++) printf "%s", $i=!a[$i]++?($i ORS):""; print ""}' file
c123456 - this is the third merge (#3)
../file4
b123456 - this is the second merge (#2)
../file1
../file3
a123456 - this is the first merge (#1)
../file2
推荐阅读
- python - 将 MDF 文件中的通道组合到嵌套结构中
- html - 您好我正在尝试使用 SVG 制作带有文本的加载屏幕。但是每次文本没有到达我想要的位置时,它就会出现在网站徽标的后面
- shapefile - 无法在 R 中加载 shapefile
- c++ - 简单的 C++ 计算器总是输出 16
- google-sheets - 是否可以在不冻结的情况下在 Google 表格中创建可滚动表格?
- ios - 使用 AVPlayer 分散视频注意力
- c# - 将 C# 片段转换为 Dart 以获得二维数组
- oracle - Oracle REST POST 请求返回 sys_refcursor 的问题
- python - 来自文件的 Python 模式匹配
- javascript-objects - 如何使用javascript操作数组内的对象?