git 在提交和签出的时候能否配置自动转换文件编码格式?

2017-03-30 12:40:03 +08:00
 patrickstar
团队使用 GitLab ,现有的软件库(主要为 C/C++)基本都是在 linux 下编写的采用了 UTF-8 编码(无 BOM )纳入仓库,现在部分程序需要构建 Windows 版本(采用 VC12 ),面临最大的问题就是 VC12 的 cl, link, nmake 工具都不支持“无 BOM 的 UTF-8 ”编码( VC12 可以支持 UTF-8 with BOM 编码,但无 BOM 的 UTF-8 编码好像被中文 Windows 解析为 GBK 了),所以希望在 Winodows 上使用 git 在签出时能自动转换为 UTF-8 with BOM (即加上三个字节的 BOM 头),提交前能自动变回去(无 BOM 的 UTF-8 )提交,就像在 Windows 平台下把 core.autocrlf 设置为 true 时自动转换 LF 和 CRLF 这样子

不知道 git 能不能实现这样的需求,如果不行就只有写个 python 脚本,在每次提交前和签出后进行手动转换
7488 次点击
所在节点    Linux
11 条回复
patrickstar
2017-03-30 12:41:52 +08:00
我真不明白微软为啥子不认真支持一下 UTF-8 without BOM ,对于 UTF-8 ,好像加个 BOM 没有什么意义啊
shuax
2017-03-30 12:50:57 +08:00
u8 不知道能不能解决
gesse
2017-03-30 13:21:06 +08:00
patrickstar
2017-03-30 13:24:02 +08:00
@shuax 可能我没说明白,我说的是源程序文件的编码,不是说程序内 字符串等内容的编码
patrickstar
2017-03-30 13:25:57 +08:00
@gesse 好像可以,只要能够加钩子,我尝试一下子,谢谢!
uugklp
2017-03-30 23:49:25 +08:00
SoloCompany
2017-03-31 02:01:31 +08:00
何必这么麻烦,你在构建脚本上检测一下 windows 环境然后 chcp 65001 不就得了
patrickstar
2017-03-31 12:41:05 +08:00
@SoloCompany
chip 65001 后可能可以在 cmd 下正确显示 UTF-8 文件内容(比如 type utf8.txt 可以把文件内汉字显示出来),但是关键问题是 Visuanl Studio 的 C++ 构建工具(如 cl.exe )不认识 UTF-8 without BOM 文件,这个问题主要出在微软的 VS 工具,参见: https://msdn.microsoft.com/en-us/library/xwy0e8f2(v=vs.120).aspx
SoloCompany
2017-03-31 13:27:19 +08:00
但你的描述是 [但无 BOM 的 UTF-8 编码好像被中文 Windows 解析为 GBK 了]
这个显然是根据配置或者环境来确定的
应该在这个环节上来解决问题,如果环境不生效( chcp ),请检查一下项目配置是否有不正确的地方

我就不信你把 Windows 的 system profile 和 user profile 的 default charset 都配置成 utf8 了还会用 GBK 加载?难道 VS 是专门给中国人写的吗
zhiqiang
2017-08-26 09:28:40 +08:00
我面临同样的问题。楼主解决这个问题了吗, 能否分享以下方案?
patrickstar
2017-08-26 22:42:39 +08:00
@zhiqiang 一直未来得及学习 git hook 和它支持的脚本语法,所以还没解决!
现在写了个 python 代码手动转换一下,临时凑合一下子

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/351438

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX