是否可以在不改变`git blame`报告的信息的情况下对代码进行更改?

时间:2018-04-29 19:48:47

标签: git

假设我有一个包含来自多个用户的代码的git存储库,但其中一些不符合缩进指南并使用空格而不是制表符。改变这一点很容易,但是通过清理他们的代码,"A", "B", "C - "D"", "E,F", "G,H,I", 5, 6, 2135231 变得不那么有用,因为那时我会被其他人的代码指责。

我已经看到可以使用相应的标志指定提交的作者和日期,但是这个解决方案对我来说并不理想,因为我必须迭代用户并依次更改每个用户的缩进。我还必须找出更改行的原始提交日期才能使用git blame标志。

我也知道--date忽略了这样的空格更改,但我想让更改透明化。每当我git blame -w时,我发现使用-w会很麻烦。 (作为旁注,我怀疑其他人会记得在从blame中提取信息时使用该标志。)如果更改与空格无关(例如,与单个引号交换),这种方法也将被破坏。双引号)。

是否可以更改git 中的跟踪文件而不被视为更改行的作者,理想情况下,不更改原始提交的日期?

2 个答案:

答案 0 :(得分:1)

我还没有测试过这个核心 git 功能,但无论如何,在这个答案的后半部分,我说一个非常不同的策略 (GitLens),我已经很好地测试了......

Git 2.23 版推出了一项可以满足您需求的功能。您可以指定一个包含要忽略的提交列表的文件,在执行 git blame 时。

步骤:

  1. 仅进行一次或多次更改代码格式的常规提交。
    • 附带说明:我建议使用 Prettier 生成这样的提交。 (该工具可让您运行 npx prettier -w --single-quote **/* 之类的命令来格式化文件。警告:该特定命令可能会更改/改进您运行它的文件夹中的大多数文件,并且它将遵循任何 smlink您在该文件夹中拥有(如果您使用 smlinks)来更改其他喜欢的文件夹中的文件。(您必须安装 Node 才能使用 npx。))
  2. 按照 https://akrabat.com/ignoring-revisions-with-git-blame/ 上的说明在执行 git blame 时忽略这些提交。

可选奖励步骤:阅读某人在 that 文章中发表的评论,该文章说如何获取 GitLensVS Code 扩展名以关注该文件列出要忽略的提交。永远不要再在命令行上使用 git blame,只需使用 GitLens 的 git 历史记录工具。

  • 关于 GitLens 的额外提示:
    • 请务必将 "gitlens.blame.ignoreWhitespace": true, 设置/行放入您的 .vscode/settings.json 文件中。 (该文件用于为该项目工作的每个人设置 vscode。)
    • GitLens 提供了许多查看 git blame 的好方法,但是当我搜索 git 历史时,大多数情况下,仅显示一行的最后一个编辑器的浅层 git blame 不足以满足我的需求。因此,当我想查看特定行的历史记录时,我会使用左侧面板。请务必按下此处显示的小按钮(直到将鼠标悬停在其上才会显示)vscode screenshot of button to toggle looking at git blame history of an entire file or for a single line 以从显示整个文件的 git 历史记录切换到仅显示光标所在行的 git 历史记录, 并可靠地跟随文件重命名效果很好,我什至不需要在 https://akrabat.com/ignoring-revisions-with-git-blame/ .
    • 在做上一个要点中提到的事情时,我还发现我需要使用 Pin History Button lot pin history button screenshot。我会告诉你我遵循的神奇有效的步骤来使用它。我知道我在下面列出的步骤看起来很长,但是一旦您知道这些步骤,它们只需要大约 1 分钟即可完成。以下是步骤:
      1. 查看安装了 GitLens 扩展的 VS Code 中的文件。 (希望你已经这样做了,因为 vscode 很棒而且相对轻量级。)
      2. 将光标放在您想了解其历史记录的行上。
      3. 确保您已打开线路历史记录模式。 (请参阅第一个屏幕截图。)
      4. 切换 Pin 历史记录按钮
      5. 点击一个提交,在那里的提交列表中。单击一对,直到您找到立即向您显示的最旧的一个,在屏幕的中间,一个看起来不错/与您关心的行相关的差异(通常是列表中的顶部提交)。
      6. 将光标放在差异的左侧上您关心的行的版本上。
      7. 按下 Pin History 按钮两次,将其关闭,然后重新打开。
      8. 回到第 5 步,重复,直到找到将那个讨厌的 bug 引入到你漂亮的代码中的提交,这样你就可以知道那个提交的作者,并给他们发一封礼貌的便条,让他们知道具体是什么下次他们可能要特别注意的错误类型。

答案 1 :(得分:0)

git filter-branch命令家族将重写历史记录,并且默认情况下它们会保留原始时间戳和作者。


以下命令将为您提供在当前提交中修改的文件:

git diff --no-renames --diff-filter=AM HEAD^

如果您有“可重入”脚本,则可以将此列表提供给该脚本:

# let's say you save this script in file /tmp/cleanup-head.sh :
git diff --no-renames --diff-filter=AM HEAD^ | xargs reindent

您现在可以将cleanup-head.sh用作“索引过滤器”的操作:

git filter-branch --index-filter '/tmp/cleanup-head.sh && git add -u' <branch1> <branch2> ...