首页 > 解决方案 > git checkout -p 指定编码

问题描述

我正在使用存储库中的混合编码文件。

我的系统 $LANG 是en_US.UTF8,文件编码是iso-8859-1。当我运行git checkout -p HEAD filegit 时,使用UTF8向我展示差异。

我看到这样的事情:

-               "�" - EUR
-               "�" - GBP
-               "�" - JPY
+               "�" - EUR
+               "�" - GBP
+               "�" - JPY
Discard this hunk from index and worktree [y,n,q,a,d,/,j,J,g,e,?]?

问题是,“�”不是文件的正确内容。当我跑步时,iconv -f iso-8859-1 -t UTF8 file | less 我看到

"¤" - EUR
"£" - GBP
"¥" - JPY

当我在运行时接受或放弃更改时,git checkout -p我想确切地查看更改了哪些字符而不是“�”字符,这是无用的。我该怎么做?

标签: gitencodinggit-checkoutgit-patch

解决方案


如果您使用关注 的 GUI 编辑器,您应该能够通过在其命令行上LANG临时设置来使用与终端不同的编码来调用它。LANG

例如,在 utf-8 终端中,我使用以下语法编辑 iso-8859-1 文件gvim

LANG=en_US.iso-8859-1 gvim file-encoded-in-latin1

您应该能够git checkout -p通过临时更改 Git 编辑器来完成相同的临时设置:

LANG=en_US.iso-8859-1 GIT_EDITOR=gvim git checkout -p HEAD file

如果你不能使用 GUI 编辑器,我不确定你怎么能做到这一点,因为 Git 总是会向你显示文件的真实内容,并且终端控制显示编码。这就是为什么我认为你需要像这样弹出一个 GUI 编辑器。


推荐阅读