首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >git中的拖车选项--漂亮的选项

git中的拖车选项--漂亮的选项
EN

Stack Overflow用户
提问于 2020-12-19 23:52:06
回答 1查看 619关注 0票数 1

我试图从git日志中提取一个贡献摘要,并对其创建一个简明的摘要,并从中创建一个excel/csv来提交报告。

我确实试过

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git log --after="2020-12-10" --pretty=format:'"%h","%an","%ae","%aD","%s","(trailers:key="Reviewed By")"'

CSV看起来就像在末尾有一个空白的CSV列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
"7c87963cc","XYZ","xyz@abc.com","Tue Dec 8 17:40:13 2020 +0000","[TTI] Add support for target hook in compiler.", ""
...

git log看起来就像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
commit 7c87963cc
Author: XYZ <xyz@abc.com>
Date:   Tue Dec 8 17:40:13 2020 +0000

    [TTI] Add support for target hook in compiler.

    This adds some code in the TabeleGen ...
    This is my body of commit.

    Reviewed By: Sushant

    Differential Revision: https://codereviews.com/DD8822

我不能成功的是使用Differential Revision命令提取(trailers:key="Reviewed By")字符串。

我找不到多少关于如何让这件事奏效的东西。我查看了git手册,并尝试了它的解释。

这条命令里有什么东西我可能遗漏了吗?预期的输出应该在上述CVS输出的最后位置具有文本https://codereviews.com/DD8822

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-20 05:09:12

我不确定,但:

  • 预告片键不能有空格(因此Reviewed By -> Reviewed-ByDifferential Revision -> Differential-Revision);
  • 不应用新行分隔拖车,而应将其与提交消息分隔开来(因此,您的问题中的Reviewed By不被视为预告片)。

我也不建议使用CSV,而是使用TSV : git输出不知道CSV语法(分号和逗号转义),因此输出文档可能是不可解析的。

如果提交消息看起来像这样(-而不是空格,没有新的行分隔符):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
commit 7c87963cc
Author: XYZ <xyz@abc.com>
Date:   Tue Dec 8 17:40:13 2020 +0000

    [TTI] Add support for target hook in compiler.

    This adds some code in the TabeleGen ...
    This is my body of commit.

    Reviewed-By: Sushant
    Differential-Revision: https://codereviews.com/DD8822

然后,下面的命令将适用于您:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git log --pretty=format:'%h%x09%an%x09%ae%x09%aD%x09%s%x09%(trailers:key=Reviewed-By,separator=%x20,valueonly)%x09%(trailers:key=Differential-Revision,separator=%x20,valueonly)'

生成短提交id、作者姓名、作者电子邮件、日期、提交消息、预告片Reviewed-By和预告片Differential-Revision到您的选项卡分隔的值输出。

如果您可能不会更改旧的提交消息,因为您的历史记录不安全(它是由对等方发布、提取的,您的工具绑定到已发布的提交散列),那么您必须使用git log输出来处理sedawkperl或任何其他文本转换工具来生成报表。例如,处理类似git log --pretty=format:'%x02%h%x1F%an%x1F%ae%x1F%aD%x1F%s%x1F%n%B'的内容,其中应该以某种方式分析^B (STX)和EOF之间的行(对您感兴趣的拖车进行筛选),然后从^B开始连接到它们的组行,然后替换字符,分别用\t替换字段分隔符和no字符。

但是,如果您可以通过修复提交消息预告片来编辑历史记录(不确定它可能会产生多大影响),我建议您这样做,然后拒绝额外的脚本处理预告片的想法,这些预告片是git-interpret-trailers无法识别的,只需修复提交消息。

编辑1(文本工具)

如果重写历史记录不是一个选项,那么实现一些脚本可能会帮助您解决问题。我在编写强大的sed/awk/perl脚本方面相当薄弱,但让我试试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git log --pretty=format:'%x02%h%x1F%an%x1F%ae%x1F%aD%x1F%s%x1F%n%B' \
    | gawk -f trailers.awk \
    | sed '$!N;s/\n/\x1F/' \
    | sed 's/[\x02\x1E]//g' \
    | sed 's/\x1F/\x09/g'

它的工作原理:

  • git生成一个用标准C0 C1码分隔的数据日志,假设没有这样的字符--您的提交消息(STX、RS和US )--我不知道这样使用它们是否是一个好地方,以及我是否应用它们在语义上是正确的);
  • gawk过滤试图解析STX启动组的日志输出并提取拖车,生成“双行”输出(常规数据的每条奇数行,逗号连接的拖车值的偶数行,甚至是缺失的拖车);
  • sed通过对将奇数行和偶数行连接起来(学分归卡洛利·霍瓦斯);
  • sed去除STX和RS;
  • sed将我们替换为TAB。

这里是trailers.awk (同样,我不是awk的人,也不知道下面的脚本有多地道,但它似乎很管用):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/awk -f

BEGIN {
    FIRST = 1
    delete TRAILERS
}

function print_joined_array(array) {
    if ( !length(array) ) {
        return
    }
    for ( i in array ) {
        if ( i > 0 ) {
            printf(",")
        }
        printf("%s", array[i])
    }
    printf("\x1F")
}

function print_trailers() {
    if ( FIRST ) {
        FIRST = 0
        return
    }
    print_joined_array(TRAILERS["Reviewed By"])
    print_joined_array(TRAILERS["Differential Revision"])
    print ""
}

/^\x02/ {
    print_trailers()
    print $0
    delete TRAILERS
}

match($0, /^([-_ A-Za-z0-9]+):\s+(.*)\s*/, M) {
    TRAILERS[M[1]][length(TRAILERS[M[1]])] = M[2]
}

END {
    print_trailers()
}

awk脚本是如何工作的:

  • 它假定不需要处理的记录从STX开始;
  • 它尝试为一个grep模式对每个非“STX”行进行grep,并将发现的结果保存到临时数组TRAILERS (它实际上充当一个多个数组,就像Key Name: Value中的Map<String, List<String>> );
  • 每个记录都按原样写入,但在检测新记录之前或在EOF上都会编写拖车。

编辑2(更好的awk)

嗯,我在awk方面真的很薄弱,所以一旦我读到了更多关于awk内部变量的内容,我就发现awk脚本可以完全重新实现,并且可以生成一个可以使用TSV的输出本身,而无需使用sedperl进行任何后处理。因此,脚本的更短和更好的版本是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

git log --pretty=format:'%x1E%h%x1F%an%x1F%ae%x1F%aD%x1F%s%x1F%B%x1E' \
    | gawk -f trailers.awk
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/awk -f

BEGIN {
    RS = "\x1E"
    FS = "\x1F"
    OFS = "\x09"
}

function extract(array, trailer_key, __buffer) {
    for ( i in array ) {
        if ( index(array[i], trailer_key) > 0 ) {
            if ( length(__buffer) > 0 ) {
                __buffer = __buffer ","
            }
            __buffer = __buffer substr(array[i], length(trailer_key))
        }
    }
    return __buffer
}

NF > 1 {
    split($6, array, "\n")
    print $1, $2, $3, $4, $5, extract(array, "Reviewed By: "), extract(array, "Differential Revision: ")
}

更简洁,更容易阅读,理解和维护。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65377951

复制
相关文章
区间/组合/复合/sql查询
$map['id'] = array(array('gt',3),array('lt',10), 'or') ;得到的查询条件是: ( id > 3) OR ( id < 10)
PM吃瓜
2019/08/12
1.1K0
区间/组合/复合/sql查询
用户窗体编程:实现组合框与文本框联动
在VBE中,插入一个类模块,将其重命名为“CComboboxes”。在该类模块中,输入代码:
fanjy
2023/09/27
6100
用户窗体编程:实现组合框与文本框联动
SQL学习之组合查询(UNION)
1、大多数的SQL查询只包含从一个或多个表中返回数据的单条SELECT语句,但是,SQL也允许执行多个查询(多条SELECT语句),并将结果作为一个查询结果集返回。这些组合查询通常称为并或复合查询。 主要有两种情况需要使用组合查询: (1)在一个查询中从不同的表返回结构数据 (2)对一个执行多个查询,按一个查询返回数据 2、使用UNION 使用UNION很简单,所要做的只是给出每条SELECT语句,然后再每条SELECT语句之间加上UNION关键字,这样所给出的SELECT结果集就能组合成一个结果集并返回。
郑小超.
2018/01/24
1.3K0
SQL学习之组合查询(UNION)
MySQL 组合查询及全文本搜索
使用union的规则:1.两条或两条以上的select语句;2.每个select语句必须包含相同的列,表达式或聚集函数;3.这些列可以以不同的次序出现;4.列的数据必须兼容。
小末快跑
2019/07/03
1.1K0
第14课 组合查询创建组合查询union的使用规则
组合查询很容易理解就是讲多个查询的结果放在一起显示 使用UNION关键字进行查询的组合
desperate633
2018/08/22
9730
表单文本框的使用(一) 选择文本
input和textarea都会在value属性保存自己的内容,可设置和读取文本框的值。在textarea中设置value属性无效
赤蓝紫
2023/03/16
1.7K0
表单文本框的使用(一)  选择文本
使用文本框TextView/EditText的清单
在实际的开发中TextView和EditText是非常基本的控件。这两个控件的使用也是十分简单。而TextView/EditText的功能其实也是非常强大,例如简单的图文就可以使用TextView配合Spannable来实现,以及TextView的drawableTop属性。
阳仔
2019/07/31
9260
使用文本框TextView/EditText的清单
sql中的嵌套查询_sql的多表数据嵌套查询
测试的时候发现取出的是一条数据, 因为测试的时候是一天中的两条数据, 没有不同的日期,所以当日以为是正确的 ,然而第二天写入数据了,要取出数据,却发现没有数据, 返回空的行, 以为都是代码又有问题 了,找了半天都没有 ,仔细看看了存储过程中的代码,发现这样返回的数据的确是空的。
全栈程序员站长
2022/09/22
7.1K0
ExcelVBA-ADO-SQL-003多条件组合查询(模糊查询)
假如现在有一个提交表单,里面是N个查询的条件(工号、姓名、性别、年龄、部门、工资、奖金)用户可以只填写其中的几个条件来进行查询。(也可以不填写条件)
哆哆Excel
2022/10/25
2.8K0
ExcelVBA-ADO-SQL-003多条件组合查询(模糊查询)
java中sql如何嵌套查找_SQL 查询嵌套使用[通俗易懂]
id int primary key auto_increment, — 主键id
全栈程序员站长
2022/09/22
4.3K0
java中sql如何嵌套查找_SQL 查询嵌套使用[通俗易懂]
组合查询
查询项目里面放着一个下拉框,下拉框里面每一项要对应到相应的查询内容这样才查询到内容,就比如说项目这里选到了款号了,查询内容就要写对应的款号内容,就不要写颜色这些。
PHY_68
2020/09/16
8730
组合查询
Power BI中的文本大写/小写自动更改现象
在处理一些英文姓名时,经常会发现,excel表中的大小写和Power BI中的不一样,这篇文章简单说明一下:
陈学谦
2021/12/08
4.3K0
Power BI中的文本大写/小写自动更改现象
SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
分组中也可以加入筛选条件WHERE,不过这里一定要注意的是,执行顺序为:WHERE过滤→分组→聚合函数。牢记!
_DIY
2020/05/29
5.1K0
SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
SecureCRT更改vim中#注释的文本内容颜色
今天在学习redis的时候,发现vim打开redis.conf配置文件的时候,#注释起来的代码是蓝色的,阅读起来很不方便。
上分如喝水
2021/08/16
6.2K0
SecureCRT更改vim中#注释的文本内容颜色
Flutter中的文本输入框组件TextField
1. maxLines 最大输入行。默认为单行输入框,配置此参数后则为多行输入框;
越陌度阡
2021/01/05
5.1K0
Flutter中的文本输入框组件TextField
Flat风格的Qml组合框
基于Qml的ComboBox控件修改而成。 组合框代码 import QtQuick 2.0 import QtQuick.Controls 2.0 import QtGraphicalEffect
Qt君
2019/12/16
1.2K0
python文本框事件_文本框事件
οnfοcus=”if(value==’文本框里的字’) {value=”}” οnblur=”if
全栈程序员站长
2022/11/01
3.3K0
ASP.NET中通过文本框的输入实现"拼音码"动态查询的效果
                  <asp:TextBox ID="TextBox1" runat="server" Style="position: relative" Width="200px"                      AutoPostBack="true" OnTextChanged="TextBox1_Changed"></asp:TextBox>                     <asp:Button ID="Button1" runat="server" Style="left: 400px; position: relative; top: 0px"                         Text="查询" OnClick="Button1_Click" />                     <asp:DropDownList ID="DropDownList1" runat="server"  Style="position: relative" Width="200px"                      CausesValidation="True" DataTextField="课程名称">                     </asp:DropDownList></td>
风柏杨4711
2021/03/15
1.4K0
sql中对嵌套查询的处理原则_sql的多表数据嵌套查询
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169416.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
5.7K0
点击加载更多

相似问题

添加新项时重复ListView项

34

Android ListView不显示新项。

15

ListView在添加新项时闪烁

21

切换到其他活动android studio时删除ListView项

10

如何将新项添加到ListView的底部,同时从顶部删除旧项?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文