gpt4 book ai didi

git - 不受最近提交影响的代码行

转载 作者:太空狗 更新时间:2023-10-29 14:11:59 25 4
gpt4 key购买 nike

如何在 git 存储库中找到自给定日期以来更改的代码?我正在尝试在活跃开发的分支上报告统计信息(文件/类/行数),对几周内保持不变的代码感兴趣。是否有任何 git 命令/工具可以帮助解决这个问题?

最佳答案

“开箱即用”中没有内置的东西可以完全做到这一点,但构造起来并不是特别困难,除了“类”位。最困难的部分是准确地确定您的意思:即使您仔细考虑您希望从这样的工具中得到什么,您也可能会得到很多毫无意义的统计数据。


首先,您需要选择比您的“开始”日期新的最新修订版,这通常是git rev-list 的任务。 (又名 git log )及其 --min-age--max-age选项(也称为 --until--since )。

使用这些,加上任何需要的额外选项(可能是 --first-parent ,取决于 merge 和它们周围的期望行为,以及其他排序选项,如 --author-date-order ,加上任何需要补偿客户端坏时钟的东西——你的 git 相信“他们”,无论“他们”是谁,当他们今天向您发送日期为 1975 年或 2031 年的新提交时,这可能会扭曲您的统计数据)。确定您想要的行为,然后调整选项以实现它。

在任何情况下,结果都将是按某种顺序排列的修订 ID 列表(顺序取决于您提供的排序选项;默认为按提交者时间戳“倒序排列”)。

选择其中最新的一个,可能使用 -n 1-1 (一样)。现在你有了一个起点:“什么改变了,什么没有改变”等式的一端。另一端只是分支的尖端,即无论 git rev-parse <branchname> 是什么。说,虽然应该不需要从名称转换为原始提交 ID,特别是如果您只是检查了该分支。

此时最直接的工具大概就是git blame (必须在每个感兴趣的文件上运行)。请注意,它内置了上面的一些(但不是全部):特别是,它可以直接与 --since 一起使用。 ,它基本上告诉它“使用从 HEAD 回到但不早于 --since 日期的所有内容”。它的输出格式在这里应该是相当明显的。它不会报告从它检查的最基本版本中删除的行,但这些行显然已“更改”;当然,它不知道如何计算构成“类”的任何内容(这将取决于您选择的语言:例如,C++ 和 Python 将需要非常不同的处理方式)。

要发现已删除的行和已删除的文件,拥有原始修订版的原始 ID 会有所帮助:然后您可以使用,例如 git diff --stat <original> <latest>并解析其输出(但 beware of truncation )。

关于git - 不受最近提交影响的代码行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37119003/

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