【问题标题】:What is the Git trying to show me? Git diff between lines with no perceptible difference. Diff contains � replacement characterGit 试图向我展示什么?行之间的 Git diff 没有明显的差异。 Diff 包含 � 替换字符
【发布时间】:2021-04-13 12:17:07
【问题描述】:

观察到的问题

在发布到 BitBucket Repo 之前查看 PR 中的提交/差异时,我发现了许多类似这样的更改:

我猜它与这个替换字符有关,�(带问号的黑色菱形)。我想了解这些行之间有什么不同以及如何解决它们。其中有很多,它们分散了 PR 功能变化的注意力。

更新

根据 cmets 确认编码为 UTF-8

根据 cmets,添加了我的 IDE 如何呈现相关行的屏幕截图:

【问题讨论】:

  • 该文件本身的字符在您的本地环境中(例如在您的文本编辑器中)的外观如何?该文件是否有一些特殊编码?
  • 它可能应该是单引号',但来自不同的编码或字符集,而不是常规的单引号,然后Bitbucket的UI无法正确呈现。
  • 看起来我可能只是对标记为“非功能性”的提交进行全局查找/替换

标签: git bitbucket git-diff


【解决方案1】:

首先检查您的个人资料中的 IDE 文件编码。

然后在 git 仓库中检查你是如何设置的:

设置utf8的命令示例:

git config gui.encoding utf-8

对于本地仓库,当然你也可以通过输入全局设置:

git config --global gui.encoding utf-8

所以基本上我所说的尝试看看你的所有部分是否匹配相同的编码。

【讨论】:

    【解决方案2】:

    这不是 Git:这是一个编码问题。

    请注意,黑色钻石问号符号是某些系统告诉您的:我在这里看到了一些符号,但我不知道如何显示该符号。阅读 Joel Spolsky 的文章,The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)。具有讽刺意味的是,这个页面有一点显示s–,这是一个ASCII字母s(Unicode LATIN SMALL LETTER S,U+0073)后跟一个“短划线”(Unicode EN DASH,U+2013,十进制值8211)。这是取两个 ASCII 连字符 -(Unicode HYHPEN-MINUS,U+002D)并将它们组合成一个破折号的结果,这是许多排版或标记系统的特性,但 不应该应用于此特定序列。它应该呈现为s--,带有两个连字符。

    在您的情况下,尝试用简单的 ASCII 字符(可能是反引号、Unicode GRAVE ACCENT、U+0060 和单引号、Unicode APOSTROPHE、U+0027)替换可能会损坏某些文件花哨的 Unicode LEFT SINGLE QUOTATION MARK U+2018 和 RIGHT SINGLE QUOTATION MARK U+2019 代码。但是,任何可能导致这种转换错误并使用其他编码的软件。因此,您的显示软件正在尝试读取这种替代编码好像它是这些 Unicode 代码点的正确 UTF-8 编码,但实际上不是。

    所有这些都会出错的方式有很多,其中许多都在 Spolsky 的文章中有所提及。作为一名程序员,您有责任找出问题所在并解开谜题。

    【讨论】:

      猜你喜欢
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      • 2017-10-28
      • 2022-12-04
      • 1970-01-01
      • 2020-01-18
      相关资源
      最近更新 更多