繁体   English   中英

git仓库中每个文件的配置编码,以便正确输出`git diff`

[英]Config encoding per file in git repository for proper output of `git diff`

假设我的git储存库中有两个文件,使用不同的编码:UTF-8和CP866。 我已经用UTF-8设置配置了控制台等。

我希望git diffgit show类的git命令的输出行为正常,并且不显示类似的内容:

diff --git a/myfile.tex b/myfile.tex
index 01ad4f3..b1fd24c 100644

--- a/myfile.tex
+++ b/myfile.tex
@@ -220,9 +220,9 @@ centertags]%
-<A3><A4><A5> $f_i \in k[x_1, \ldots , x_n]$, <A8><AC><A5><A5><E2> <E0><A5>襭<A8><A5> $(a_1, \dots, a_n)$. <92><AE><A3><A4><A0> <AF><AE><AB><A8><AD><AE><AC><A8><A0><AB>쭠<EF> <E1><A8><E1>⥬<A0> $\{ R(f_1,f_i) = 0 \}$ <A4><AB><EF> $i = 2, \dots, n$, <A3><A4><A5> $f_i$ <E0><A0><E1>ᬠ<E2>ਢ<A0><A5><E2><E1><EF> <AA><A0><AA> <AF><AE><AB><A8><AD><AE><AC> <AE><E2> $x_n$ <AD><A0><A4> <AA><AE><AB><EC>殬 $k[x_1, \ldots , x_{n-1}]$, 
<E1><AE><E1>⮨<E2> <A8><A7> $n-1$ <E3>ࠢ<AD><A5><AD><A8><A9> <AE><E2> <AF><A5>६<A5><AD><AD><EB><E5> $x_1, \dots x_{n-1}$, <A8> <A8><AC><A5><A5><E2> <E0><A5>襭<A8><A5> $(a_1, \dots, a_{n-1})$.
+<A

有一个选项可以为所有文件设置编码转换:

git config --local core.pager "iconv -f cp866 -t utf-8 | less"
git config --local i18n.commitEncoding utf8
git config --local i18n.logoutputencoding cp866

但是我的目标是以某种方式设置每个文件的编码转换。 我希望我的UTF-8文件和CP866文件能够正确处理。

有解决方案吗?

如果您的Git较新,则可以让Git将所有文件以UTF-8格式存储在存储库中,并只需使用其他编码将其中的某些文件签出即可。 然后,Git将按预期显示差异,但是您的工作树将具有正确编码的文件。

为此,您可以在存储库的根目录中创建一个.gitattributes文件,如下所示:

myfile.tex working-tree-encoding=CP866

(您可能更喜欢使用IBM866 ,因为这是标准名称,并且可能会得到更广泛的支持。)如果您希望文件仅位于系统上的CP866中,而让其他人使用UTF-8版本,则可以使用此名称。 .git/info/attributes条目,而不是将其检入存储库。

您还可以在gitattributes文件中指定(几乎)可以在gitignore文件中指定的任何模式,例如,可以使用通配符。

添加.gitattributes文件后,应运行git add --renormalize . 确保所有文件都使用正确的编码,然后提交所有更改。

新存储库的一组示例步骤:

git init
printf 'a\xffb\n' >myfile.tex
git add myfile.tex
git commit -m 'Add CP866 file'
# You are here.
echo 'myfile.tex working-tree-encoding=CP866' >.gitattributes
git add --renormalize .
git commit -m 'Store files as UTF-8'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM