是否可以允许一个存储库的utf-8编码和另一个存储库的gbk编码?

时间:2013-11-26 07:09:32

标签: git web encoding

环境:
SUSE Linux企业服务器11 sp1
git版本1.6.0.2
用于访问控制的gitoite
git web在apache上运行

我有两个存储库。在repo a中,它是编码  是gbk,而repo b是utf-8。
如果repo a有中文代码,中文字符  当被git web查看时,它将是凌乱的代码
但是repo b中的中文代码会正确显示。
所以我想问一下git web是否有可能识别出来  不同存储库的不同编码。 并可以显示中文代码

1 个答案:

答案 0 :(得分:0)

(我没有关于这个主题的确切知识;我只是总结一下我对Git编码的了解。)

有两种对象,其内容可以解释为特定编码:

  • 提交(提交消息是其中的主要部分)。
  • BLOBs - 文件的内容。

关于提交,Git有三个configuration旋钮来控制编码:

  • i18n.commitEncoding:当设置(到编码名称)时,告诉Git将一个特殊的头放入一个提交对象,该对象指定提交消息的编码。

    相反,读取此类提交对象的工具可能会解析此标头并使用提交编码的知识将提交内容正确地重新编码为 native 表示。

  • i18n.logOutputEncoding可能用于更改Git关于用户终端编码的想法,当写下运行git log命令的结果时。
  • gui.encoding:设置后,使标准Git GUI工具(gitkgit gui)假定 all 存储库中的文件已编码在指定的编码中。这允许这些工具正确地将文件内容重新编码为其本机编码。

    可以使用.gitattributes file中的encoding参数,以每个文件为基础对存储库中文件的本机编码暗示Git工具。

那么,您可以尝试做些什么来配置gitweb ......这完全取决于此工具是否符合上述配置旋钮。

首先,我会尝试在您的存储库中正确设置gui.encoding(注意:在gitweb访问的存储库中)。

如果你在提交消息中使用GBK,那么 在这些提交对象中有一个合适的编码头,否则它就不会起作用了,我想。如果您没有它们,请考虑对您的存储库进行测试history rewriting。这需要做一些研究。

您还可以考虑调整Web服务器配置以强制运行它的CGI工具(包括gitweb)在其环境中查看启用GBK的区域设置 - 此可能 make { {1}}只是在显示文件时“传递”文件内容。我不确定它会起作用,但至少你可以试试。