问题标签 [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.
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.
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,混合模式)
默认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
git - git blame:计算开发人员贡献的字符数量(跟踪重命名)
对于某些统计目的,我需要精确计算开发人员为 git repo (HEAD) 的当前状态贡献的字符数量。
我能得到的最接近的是这个命令:
这种方法存在一些问题:
- 即使有几个人贡献了一个文件 - 所有角色都将归属于最初的作者,
- 如果作者的文件
SomeDev
在某个阶段被重命名,它会失败。
可以git blame
以某种方式用于此目的吗?我看到它一方面可以跟踪文件重命名,但它似乎将整行归因于最后一个提交者,即使他可能只更改了其中的几个字符,而其余部分是由前一个提交者贡献给该行的。
git - Git:重命名后可靠地获取责备历史
我正在尝试构建一个git log
命令来检索具有以下属性的文件的历史记录(跟随副本和重命名):
我希望日志在注释之后“关闭”——也就是说,如果我
git blame -elfwM
在历史记录中提交任何提交(使用当时文件的任何名称),我希望注释中出现的每个提交也被载入史册。我想知道历史记录中每个条目的文件原始名称。对于未重命名文件的提交,这将与文件名相同;对于这样做的提交,我想知道该提交的每个父级中的原始文件名。
对于文件的任何给定注释(在其历史记录中的任何时间点),我希望该提交的相应历史记录条目(我们知道从属性 1 中存在)使其作者、日期和文件名与作者、日期和文件名匹配注释的文件名。
满足(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
命令中,使用恒定数量的命令的解决方案也可以工作。我想避免做诸如递归检查注释以得出历史记录之类的事情,并且如果存在每行都更改的提交(例如,由于重新格式化),那么该特定策略也会失败。
libgit2 - pygit2/libgit2:它支持反向责备吗?
我需要进行责备操作,但这是反向责备:
http://carlosmn.github.io/libgit2/#HEAD/type/git_blame_options https://www.pygit2.org/blame.html#blame
我知道我可以提供 2 个修订版,最新的和最旧的……如果我以相反的顺序提供它们,它会产生反向责备吗?
git - 在 git 中,如何恢复已删除的文件及其责备信息
假设我删除了一个文件foo
以及对 HEAD 的许多其他更改(哈希显然是假的!)
几次提交后,我决定我真的不想删除foo
. 如何恢复它,同时恢复它的所有git blame
信息?如果我只是git checkout 00AAAAAAAA -- foo
,它会显示为一个新文件,因此不会保留任何责备信息。同上,git revert -n 00AAAAAAAA
然后手动删除额外的还原,甚至git restore --source 00AAAAAAAA
. 所有这些都恢复了已删除文件的内容,但我丢失了git blame
信息。
是否有一些我缺少的标准选项可以做到这一点,还是我必须通过挖掘提交树来滚动自己?
git - git如何创建文件责备?
我最近了解到git blame
它的作用。我想知道 git 如何在文件中的每一行发生更改时找到它,即使是跨文件重命名也是如此。换句话说,我想知道责备算法是如何工作的。
git - Git:如何在更改其 EOL 后恢复文件历史记录责备轨道?
我们有一些文件最初是在 Windows 下使用 EOL (CRLF) 创建的,而其他文件是在 Linux (LF) 下创建的,有时 IDE(或重新安装后配置错误的 Git)会更改这些 EOL 覆盖并让我们丢失文件的整个历史记录(blame
完全没用,只需使用 -w 即可)。
我尝试跟踪文件最后一次正常的时间,在切换 EoL 并替换它之前,但没有工作,从另一个分支检索该文件。由于该文件的更改总是很小,因此在多次提交和合并后我没有注意到这个问题,我有一个 6 个月大的分支与原始 EOL。
如何修复这些文件?
git - 如何“复兴” git blame 历史
我发现自己处于危险的境地。
我致力于重构一个庞大的现有代码库。我决定注释掉一些测试,并在我修改代码时逐渐启用它们。不幸的是,我提交了注释,现在完整测试模块的 git blame 历史显示我是最后一次更改的作者。我对这段代码的唯一贡献是两次提交(注释和取消注释) - 不幸的是,第一个提交伴随着我想保留的其他地方的更改。
我对 git 的了解不足,不知道是否有一种相对简单的方法可以更正 git 历史记录以显示代码先前状态的作者(在我注释掉之前)。
从头开始是我唯一的选择吗?
git - 将 git blame 导出为 PDF 或 HTML
是否有git blame
从(文本)文件导出到PDF(首选)或HTML的编程方式?
我知道 github 已经在 webbrowser 中提供了责备视图(参见例如这里),但最后我想对给定存储库中的所有文件进行责备导出。