Git - 支持外来字符集

Git - support for exotic charset

我在 abas-ERP 环境中工作,由于历史原因,它使用了一个名为 abas-s3 的深奥字符集。我们使用 Git 和 ERP 服务器上的本地存储库来对我们的程序进行版本控制。

自然Git不支持abas-s3。在 erp-servers 上有一个名为 s3_conv 的程序,它从 abas-s3 转换到外部世界(例如 UTF-8 和 UTF-16),反之亦然。

有什么方法可以使用此程序,将 UTF-8 用于存储库,将 s3 用于工作树?

感谢任何反馈!提前致谢!

如果问题出在文件内容,您可以使用clean/smudge过滤器(参见gitattributes) Git 在存储到存储库时转换为 UTF-8,在将内容检出到工作区时转换为 abas-s3。

您也可以在 Pro Git 书中找到解释。


总结:

  1. 您需要在配置文件(每个存储库、每个用户或系统范围)中定义一个过滤器 由两个命令组成:clean 从工作区域表示转换为存储库表示,smudge 反向工作。假设 s3_conviconv 一样工作,它可能看起来像这样(这是适当配置文件的片段):

    [filter "s3conv"]
        clean  = s3_conv --from abas-s3 --to utf-8
        smudge = s3_conv --from utf-8 --to abas-s3
    
  2. gitattributes file 声明(在存储库内,或每个存储库,或每个用户,或系统范围内)应该使用此转换哪些文件手术。假设您要转换 SQL 的文件,使用 *.sql 扩展名,文件的适当片段可能如下所示(注意此处 = 周围不能有空格):

    *.sql filter=s3conv
    

请注意 Git 与编码无关,您不需要转换文件的内容...除非您需要它进行互操作?


如果您需要 git diff 正确显示更改(假设您没有可以显示 abas-s3 编码并且可以在 core.pager 中使用的寻呼机),您可能需要配置 textconv 过滤器 INSTEAD:

  1. 在配置文件中:

    [diff "s3conv"]
         textconv = s3_conv --from abas-s3 --to utf-8
    

    这假定终端和寻呼机配置为显示 utf-8

  2. 在 gitattributes 文件中:

    *.sql diff=s3conv