【问题标题】:how to fix Losing git blame feature after commit? (EOL conflict)提交后如何修复丢失 git blame 功能? (EOL 冲突)
【发布时间】:2021-01-22 13:05:21
【问题描述】:

我开始看到在我的大学的一些提交中,他们更改了几行的文件被“标记”,就好像他们完全修改了它们一样。我们正在失去对这些文件使用 Git Blame 来查看“谁更改了哪一行”的可能性

我不知道他们在做什么“错误”来覆盖文件并使 Git 失去 Blame 的能力,这可能与变基有关吗?或rebase -i 和squashing?,这是与Git 版本相关的错误吗?,他们使用Linux,我使用Windows 我在我们的 git 存储库 (Assembla) 上创建了一个辅助帐户,并尝试复制它,但我不能

之前

之后

【问题讨论】:

  • 请不要将您的答案编辑到您的问题中。相反,请将其发布为答案,以便其他人对其进行投票。
  • @RobertColumbia 我没有回答我的问题,只是补充了一些知识和问题的原因,而不是如何解决它

标签: git git-blame


【解决方案1】:

这很可能是因为文件的 EOL 格式发生了变化。为什么?可能是因为开发人员对此不小心(IDE 把他们弄乱了?)...或者,很可能,您已经设置了 git 来更改文件的 EOL 格式(core.autocrlf 响了?)。您仍然可以使用 git blame -w 来查看这些修订。我最好的建议:重写分支的历史记录,这样 EOL 格式就永远不会发生(它有一个价格标签......就努力而言,以防万一)......并且不要设置 git 来更改 eol 格式。

PS 我正在编写有关如何处理冲突的指南,并且我目前正在编写一个脚本,以便能够轻松地重写分支的历史记录,以便 EOL 格式更改已更正......但它会在几天后准备好,直到我发布它。如果你愿意,我可以在这里写一个更新。指南在这里http://www.ezconflict.com/(没有跟踪,没有货币化)。

PS2:更正 EOL 更改的脚本。它假定(实际上是检查)您要求更正的是一个直分支,没有合并。提供具有正确 EOL 格式的最后修订、分支的尖端(分支名称或修订)以及需要更正的文件列表。

https://github.com/eantoranz/conflict_book/blob/main/scripts/correct_eol.sh

顺便说一句,烤箱里还热着呢。谨慎使用(它不会移动任何分支,以防万一)。

【讨论】:

  • 感谢blame -w,但我很确定我需要core.autocrlf,因为我使用Windows,需要为LF替换CRLF,Git Docum建议这样做,并安装Git 也推荐在 Windows 环境下使用这个设置。我会与我的团队核实,因为并非总是会发生,有时会影响一些文件而另一些则不会
  • 如果您不使用它(例如,不要告诉 git 更改任何 EOL 格式),那么 git 不会弄乱文件,然后取决于您用于文件不更改 EOL 格式(无论操作系统如何,体面的编辑器都会保留文件的预先存在的 EOL 格式)。
  • 在某些情况下,Netbeans 显然会改变它们,但更重要的是,它是一种恢复这种情况的方法吗?我可以恢复这些文件吗?我读到了add -renormalize .,但实际上并没有太大变化,只有 20/900 个文件受到影响,在这 20 个文件中,如果没有 -w,我不能再使用 blame
  • 我将在周末制作我的脚本的工作原型。
  • 刚刚在我的合并冲突指南上推送了关于破坏 EOL 格式的后果的解释,如果有人愿意阅读它(没有跟踪,没有货币化):ezconflict.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 2015-12-12
  • 2017-05-29
  • 2011-01-21
  • 2020-07-28
  • 2019-06-15
相关资源
最近更新 更多