我在 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 中找到解释书。
总结:
您需要在配置文件(每个存储库、每个用户或系统范围内)定义一个过滤器,它由两个命令组成:
clean
从工作区域表示转换为存储库表示,以及smudge
反向工作。假设s3_conv
像iconv
一样工作,它可能看起来像这样(这是适当配置文件的片段):[filter "s3conv"] clean = s3_conv --from abas-s3 --to utf-8 smudge = s3_conv --from utf-8 --to abas-s3
使用 gitattributes 文件(在存储库内部、每个存储库、每个用户或系统范围内)声明哪些文件应该使用此操作进行转换。假设你想用 SQL 转换文件,使用
*.sql
扩展名,文件的适当片段可能如下所示(注意此处=
周围不能有空格):*.sql filter=s3conv
请注意,Git 与编码无关,您不需要转换文件的内容……除非您需要它进行互操作?
如果你需要git diff
正确显示更改(假设您没有可以显示 abas-s3 编码并且可以在 core.pager
中使用的寻呼机),您可能需要配置 textconv
过滤器 INSTEAD:
在配置文件中:
[diff "s3conv"] textconv = s3_conv --from abas-s3 --to utf-8
这假设终端和寻呼机配置为显示 utf-8
在 gitattributes 文件中:
*.sql diff=s3conv
关于Git - 支持外来字符集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28362289/