Git - 支持外来字符集

标签 git character-encoding abas

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

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

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

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

最佳答案

如果问题出在文件内容,您可以使用clean/smudge filters(参见gitattributes)让Git 在存储到存储库时转换为UTF-8 , 并在将内容 checkout 到工作区时转到 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 文件(在存储库内部、每个存储库、每个用户或系统范围内)声明哪些文件应该使用此操作进行转换。假设你想用 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
    

关于Git - 支持外来字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28362289/

相关文章:

Windows 上的 Git/ssh 问题 (git bash)

git - 如何列出在另一个分支上修改的文件?

git - Git 会克隆、获取或推送孤儿提交吗?

`--preserve-merges` 的 Git 选项?

internet-explorer - IE 和 Firefox 中 google webfont 的特殊字符

java - 如何在命令行中设置JVM字符集?

java - Java 字符数组是否始终是有效的 UTF-16(Big Endian)编码?

erp - abas-ERP(FO-语言)/AJO : Getting mandatory fields of screen

erp - abas ERP FOP "menue command"具有多行