问题标签 [blame]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
223 浏览

git - 使用代码指标记录每个文件的多数贡献的命令

有没有办法以多数贡献者(作者)运行 Git 日志命令?我想将它与代码度量工具一起使用,以便能够从本质上显示每个贡献者生成的代码质量。

另一个有趣的观点是能够总结

此外,如果有一个 Git 工具利用 Microsoft Visual Studio 代码分析,使用http://msdn.microsoft.com/en-us/library/ms173498.aspx和 Git 日志或 Git 责备来获取每个作者,那将会很有趣指标。

在尝试识别弱点或优势以帮助改进团队成员并认可更高质量时,这将很有用。它也可以用来跟踪某人随着时间的推移而取得的进步。

我知道代码指标不一定是确定开发人员技能的准确方法,并且还有许多其他因素可以确定团队成员的贡献/技能。

0 投票
1 回答
37 浏览

svn - TortoiseSVN 可以配置为在执行 svn blame 时自动搜索所有修订版吗?

...是的,我知道这可能需要几分钟。严重地!

我只想右键单击一个文件,选择 SVN blame 并让 TortoiseSVN 做它的事情。我不想每次都手动单击确定,因为我从不更改此窗口中的任何内容。

自动选择所有修订

0 投票
1 回答
377 浏览

svn - 使用 TortoiseSVN 查找对单行的所有更改

我可以使用 Log 来查找单个文件的完整历史记录,并且可以使用 Blame 来查找谁最后更改了一行。

有没有办法使用 TortoisSVN 或其控制台对应物获取单行的完整历史记录?


原因:我需要找出文件中有很多更改的某行何时损坏,而最后的更改不是损坏它的原因...

0 投票
1 回答
203 浏览

git - 用于查找由先前更改或工作区更改更改的最新提交的工具

TL;博士

(你可能会误解这一点,所以最好跳到下一节;)

我想找到(以前的)提交一个补丁(提交或分阶段/非分阶段工作区更改)会改变。

TL;DR:继续阅读,但跳过“背景” ...

背景

我将在这里描述我的工作流程,以便您了解我的需要。

在我的开发分支上,我经常在许多 WIP 提交中提交小的更改。当我对我的整体更改感到满意时,我会以交互方式重新设置所有这些 WIP 提交以构成一个干净的历史记录。我将提交压缩到其他提交中并编写详细的提交消息。

在三种情况下,我想指出之前的提交应该被压缩到另一个提交中。

  • 当我注意到我在以前的 WIP 提交之一中引入了一个错误时
  • 当我想明确地将最近的更改合并到某个 WIP 提交中时
  • 提及在错误修复的提交消息中引入错误的提交 ID

然后我进行提交,注意必须将更改(错误修复)压缩到该提交中。

历史可能如下所示:

(有时我会在 4 小时内提交超过 15 个提交)

因为我经常做这样的小补丁,所以我想到了一个自动化的解决方案。

我想知道的

当一个补丁...

  • 删除和添加行(更改),我想获取已引入或最近更改该行的提交
  • 添加行,我想在最近更改或引入的插入之前和之后获取行的提交
  • 仅删除行,我想获取添加或最近修改这些行的提交

我如何以手动方式执行此操作

TL;DR:跳过本节并继续阅读“示例...”部分...

在准备提交(A)时,我以这种方式搜索提交(B)

  • 通过发出检查本地更改并记住受影响的行号
    • git diff如果尚未提交更改
    • git log -1 -p如果更改已经提交
  • 在补丁发布之前找到影响记忆行的提交
    • git blame HEAD -- path/to/file如果尚未提交更改
    • git blame HEAD~1 -- path/to/file如果更改已经提交

之后,在这两种情况下,我都会使用这些提交 ID 获得提交消息git log <COMMIT ID>

添加和更改示例(尚未提交更改):

这是补丁 ( git diff )

这是 git blame -L82,+8 HEAD -- Gruntfile.js git blame -L142,+8 HEAD -- Gruntfile.js

这些是提交消息( git log --oneline -1 f39f25c0 git log --oneline -1 e2e46b59

现在我知道,我必须单独提交两个大块,并提到单独的提交。

解决方案

是的,我阅读了git-blame手册页,但我没有找到一个合适的选项来做到这一点(我确信我可能错过了一些东西)。

是的,我也试过在互联网上搜索这个。但是,嗯,我花了一页来描述它——我应该如何制定黄金谷歌搜索表达式来找到这个?

是的,正如您将在下一节中看到的,我有自己的想法。

我的方法

我将创建一个脚本来解析由git log -por生成的补丁git diff。它将使用“我想知道的”部分中的规则输出补丁影响的所有行号。然后一个 bash 脚本通过检查输出来查找提交 ID git blame HEAD[~1],提取提交 ID。最后一步是获取提交消息。另一个步骤可能是用刚刚找到的提交消息装饰整个补丁输出(多个块和文件)。

(实际上目前我正在编写一个 Python 脚本来进行补丁解析)

替代方法

也许这可以通过从git blame -- <FILE>and中提取提交列git blame HEAD -- <FILE>并将两个输出输入diff,然后grep -C <N>ing for00000000等来找到受影响的提交 ID 来完成。

但我认为这很脆弱,不如上述方法可靠。而且我也需要解析责备差异的补丁。

(我已经尝试过了。最难的部分是 diff 输出解析。)

尝试将其简化为一个问题。

是否有一个标准的 Git 工具,通过显示通过应用提交更改的提交,将 git blame 的功能与 git log 提供的数据相结合?

我希望我的问题足够清楚。:)

要具体。

我确定,我是。

0 投票
1 回答
1789 浏览

git - Git Blame:查看特定用户创作的所有行

git blame 可以用来查看当前代码库中单个用户提交的所有行吗?

0 投票
1 回答
491 浏览

eclipse - 如何使用复制检测完全注释(责备)源?

我知道我可以使用(right mouse click on a line)Team–在 Eclipse 中启用注释Show Annotations。但是,这不使用复制检测或移动检测机制git。我可以选择在幕后进行的git gui blame“执行完整复制检测” 。git blame -C -C -C -M如何用 Eclipse/EGit 做同样的事情?

(请注意,我使用的是 Eclipse 版本,其中Eclipse JGit 错误 374382 - 合并提交后注释错过了修订,所以我的问题实际上是关于复制和移动代码。)

0 投票
2 回答
2160 浏览

accurev - 如何找出谁最后在 accurev(命令行)中修改文件?

我正在编写命令行工具,它在 accurev 中构建流的内容,然后通知破坏构建的用户。我可以使用以下命令获取提升到流的文件列表:

它输出修改后的文件:

我如何找出最后修改它的人?

更新: 我的问题的正确组合是这样的:

它产生当前交易的列表,我解析得到这个范围:

0 投票
2 回答
571 浏览

mercurial - 如何找出谁删除了分支中的一行代码?

我们在部署的一个分支中遇到错误,查看它我发现一个文件缺少一行代码。我如何找出谁删除了它以及何时删除?

我知道这与 hg blame 有关,但似乎每次我尝试使用它时都会收到“此文件在此提交中不存在”消息,即使这样我也不确定如何制定查询以给出我想要什么。

0 投票
1 回答
699 浏览

git - 将 `cloc` 与 `git blame` 结合起来

cloc使人们能够计算每种语言每种类型(空白、注释或代码)存储在目录中的代码行数。

git blame使人们能够看到文件的哪一部分属于谁。

我正在寻找一种将两者结合起来的方法,以便获得一个(三维)矩阵,该矩阵列出每个用户每种语言每种类型的代码行。

是否有优雅的内置方法可以做到这一点,或者应该“废弃”每个用户的“责备”部分(通过运行grepafter git blame)并cloc在它们上运行以计算每个用户的表?


编辑

天真的方法(基于@Jubobs 的评论):

  1. 首先为目录中的每个文件生成一个责备文件(不必显式)。
  2. 运行 grepgrep "^[^(]*([^)]*)"以捕获所有用户的列表并使用 和 检索唯一sortuniq
  3. 对于每个用户:生成文件夹的卷影副本并使用 grep 进行 grep,grep "^[^(]*($user)"以便仅保留该用户的行。
  4. 在卷影副本上运行 cloc。
  5. 为每个用户执行此操作,存储结果并将它们一起输出。

这或多或少是如何生成所需的输出。但是正如人们所看到的,这种方法会进行大量复制(或至少存储在内存中),并且实际上可以通过运行文件一次而不是多次来计算每个用户的行数。


期望的输出

就像是:

0 投票
1 回答
169 浏览

intellij-idea - 如何使用 bzr 资源管理器或通过控制台“责备”选择?

我想做 git blame 之类的事情 - 而不是整个文件

但在代码片段上(选择)

如何在 bzr(控制台或 bzr 资源管理器)中执行此操作?