问题标签 [git-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 投票
0 回答
50 浏览

ruby - How to run "git blame" on a given set of files using Octokit

I'm pretty new to the Ruby world and I'm working on a legacy ruby script that uses Octokit to which I need to add the support for running "git blame" command on a bunch of files to figure out the developers involved in causing conflicts.

I went through the documentation of Octokit - https://octokit.github.io/octokit.rb/Octokit/Client/Labels.html - but I can't seem to find a way to run git blame using Octokit. Can someone please provide me some guidance of how I should go about this? Thank you.

0 投票
1 回答
124 浏览

java - Intellij 和 Pycharm 注释显示固定的错误日期

关于 Intellij IDEA 和 Pycharm 注释(git blame)功能,我面临着一个非常奇怪的情况。

去年年底,出于开发目的,我决定在我的 MacOS Mojave(版本 10.14.6)上安装不同的 JDK。它看起来有点搞砸了,所以我花了一些时间尝试“撤消”(即删除)JDK 和 jEnv。我能够启动和使用 IntelliJ IDEA 和 PyCharm(事实上,我从来没有失去启动和使用它们的能力),但是当我单击时,这两个程序现在显示所有行的错误固定日期(10/01/2019)在每个版本化文件的“注释”选项上,无论该行有多旧或新。如果我在命令行上使用 git blame ,我会看到每个文件行的正确日期。下载并安装最新版本的 Intellij IDEA 无助于解决问题。拜托,谁能帮我恢复默认行为?

默认java版本如下: openjdk version "11.0.1" 2018-10-16 OpenJDK Runtime Environment 18.9 (build 11.0.1+13) OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13,混合模式)

  1. git责备CLI: 在此处输入图像描述

  2. Intellij IDEA 中的注释选项: 在此处输入图像描述

默认java版本为:openjdk version "11.0.1" 2018-10-16 OpenJDK Runtime Environment 18.9(build 11.0.1+13) OpenJDK 64-Bit Server VM 18.9(build 11.0.1+13,混合模式)

git版本为:git version 2.21.1 (Apple Git-122.3)

Intellij IDEA 和 PyCharm 版本是:

IntelliJ IDEA 2020.3.1(社区版)Build #IC-203.6682.168,于 2020 年 12 月 29 日构建运行时版本:11.0.9.1+11-b1145.63 x86_64 VM:JetBrains sro macOS 10.14 的 OpenJDK 64 位服务器 VM。 6 GC:ParNew,ConcurrentMarkSweep 内存:990M 内核:4 注册表:editor.distraction.free.mode=true 非捆绑插件:DBN

PyCharm 2019.3.4(社区版)Build #PC-193.6911.25,构建于 2020 年 3 月 18 日运行时版本:11.0.6+8-b520.43 x86_64 VM:JetBrains sro macOS 10.14.6 的 OpenJDK 64 位服务器 VM GC:ParNew、ConcurrentMarkSweep 内存:990M 内核:4 注册表:非捆绑插件:com.alyouni.ansiHighlight、com.intellij.ideolog

0 投票
1 回答
67 浏览

git - git blame:计算开发人员贡献的字符数量(跟踪重命名)

对于某些统计目的,我需要精确计算开发人员为 git repo (HEAD) 的当前状态贡献的字符数量。

我能得到的最接近的是这个命令:

这种方法存在一些问题:

  1. 即使有几个人贡献了一个文件 - 所有角色都将归属于最初的作者,
  2. 如果作者的文件SomeDev在某个阶段被重命名,它会失败。

可以git blame以某种方式用于此目的吗?我看到它一方面可以跟踪文件重命名,但它似乎将整行归因于最后一个提交者,即使他可能只更改了其中的几个字符,而其余部分是由前一个提交者贡献给该行的。

0 投票
0 回答
69 浏览

git - Git:重命名后可靠地获取责备历史

我正在尝试构建一个git log命令来检索具有以下属性的文件的历史记录(跟随副本和重命名):

  1. 我希望日志在注释之后“关闭”——也就是说,如果我git blame -elfwM在历史记录中提交任何提交(使用当时文件的任何名称),我希望注释中出现的每个提交也被载入史册。

  2. 我想知道历史记录中每个条目的文件原始名称。对于未重命名文件的提交,这将与文件名相同;对于这样做的提交,我想知道该提交的每个父级中的原始文件名。

  3. 对于文件的任何给定注释(在其历史记录中的任何时间点),我希望该提交的相应历史记录条目(我们知道从属性 1 中存在)使其作者、日期和文件名与作者、日期和文件名匹配注释的文件名。

  4. 满足(1),我希望尽可能少的额外提交。我特别想排除不会以任何方式影响文件的提交。

到目前为止,我能做的最好的事情是:git log --raw --follow -m --pretty="%H%n%P%n%aL%n%cs%n%s" -- FILENAME. 这是我在这条线背后的想法:

  • --follow应该完成以下重命名和副本的工作(但不给我文件名)
  • --pretty=...应该给我提交、父母、作者、提交日期和主题。我猜原作者+提交日期是什么git blame用途,但如果那是错误的,请纠正我。
  • --raw应该给我给定提交的原始文件名和新文件名。
  • -m应该拆分合并提交的条目,以便我可以获得单个父母的原始名称。

这在典型情况下似乎可以正常工作,但我编写了一个脚本来演示失败的场景。这是其中一次运行的示例输出:

第三行显示bar.txt在 2f6d49b3aa35ffa2953a65e21ba5c21d130fa3b1 中被修改。不幸的是,这个提交没有出现在历史记录中——我原以为它会因为 出现--follow,而​​且我还期望 633056c27cf0e3afb9529d478cf51ed0bdaa918e 有第二个条目,-m因为它有两个父母(我本来希望该条目有像:100644 100644 27393f0 bb5a6e5 R089 bar.txt foo-merged.txt) 这样的原始线。

注意:如果获取此信息是可以实现的,但不是在单个git log命令中,使用恒定数量的命令的解决方案也可以工作。我想避免做诸如递归检查注释以得出历史记录之类的事情,并且如果存在每行都更改的提交(例如,由于重新格式化),那么该特定策略也会失败。

0 投票
0 回答
18 浏览

libgit2 - pygit2/libgit2:它支持反向责备吗?

我需要进行责备操作,但这是反向责备:

http://carlosmn.github.io/libgit2/#HEAD/type/git_blame_options https://www.pygit2.org/blame.html#blame

我知道我可以提供 2 个修订版,最新的和最旧的……如果我以相反的顺序提供它们,它会产生反向责备吗?

0 投票
0 回答
22 浏览

git - 在 git 中,如何恢复已删除的文件及其责备信息

假设我删除了一个文件foo以及对 HEAD 的许多其他更改(哈希显然是假的!)

几次提交后,我决定我真的不想删除foo. 如何恢复它,同时恢复它的所有git blame信息?如果我只是git checkout 00AAAAAAAA -- foo,它会显示为一个新文件,因此不会保留任何责备信息。同上,git revert -n 00AAAAAAAA然后手动删除额外的还原,甚至git restore --source 00AAAAAAAA. 所有这些都恢复了已删除文件的内容,但我丢失了git blame信息。

是否有一些我缺少的标准选项可以做到这一点,还是我必须通过挖掘提交树来滚动自己?

0 投票
1 回答
62 浏览

git - git如何创建文件责备?

我最近了解到git blame它的作用。我想知道 git 如何在文件中的每一行发生更改时找到它,即使是跨文件重命名也是如此。换句话说,我想知道责备算法是如何工作的。

0 投票
2 回答
96 浏览

git - Git:如何在更改其 EOL 后恢复文件历史记录责备轨道?

我们有一些文件最初是在 Windows 下使用 EOL (CRLF) 创建的,而其他文件是在 Linux (LF) 下创建的,有时 IDE(或重新安装后配置错误的 Git)会更改这些 EOL 覆盖并让我们丢失文件的整个历史记录(blame完全没用,只需使用 -w 即可)。

我尝试跟踪文件最后一次正常的时间,在切换 EoL 并替换它之前,但没有工作,从另一个分支检索该文件。由于该文件的更改总是很小,因此在多次提交和合并后我没有注意到这个问题,我有一个 6 个月大的分支与原始 EOL。

如何修复这些文件?

0 投票
1 回答
37 浏览

git - 如何“复兴” git blame 历史

我发现自己处于危险的境地。

我致力于重构一个庞大的现有代码库。我决定注释掉一些测试,并在我修改代码时逐渐启用它们。不幸的是,我提交了注释,现在完整测试模块的 git blame 历史显示我是最后一次更改的作者。我对这段代码的唯一贡献是两次提交(注释和取消注释) - 不幸的是,第一个提交伴随着我想保留的其他地方的更改。

我对 git 的了解不足,不知道是否有一种相对简单的方法可以更正 git 历史记录以显示代码先前状态的作者(在我注释掉之前)。

从头开始是我唯一的选择吗?

0 投票
0 回答
31 浏览

git - 将 git blame 导出为 PDF 或 HTML

是否有git blame从(文本)文件导出到PDF(首选)或HTML的编程方式?

我知道 github 已经在 webbrowser 中提供了责备视图(参见例如这里),但最后我想对给定存储库中的所有文件进行责备导出。