在Mercurial中具有.sql扩展名的文件被标识为二进制文件

问题描述

为了符合Mercurial对二进制文件视图,它实际上并不跟踪文件类型,这意味着用户无法将文件标记为二进制文件或非二进制文件

正如tonfa和Rudi所述,Mercurial通过查看文件中是否存在NUL字节来确定文件是否为二进制文件。对于UTF- [16 | 32]文件,几乎可以保证NUL字节。

要“修复”此问题,必须确保文件使用UTF-8而不是UTF-16编码。理想情况下,导出时,数据库应具有Unicode编码的设置。如果不是这种情况,另一种选择是编写一个预提交钩子来执行此操作(请参见如何在Python中将文件转换为UTF-8作为开始),但是您必须非常小心要转换的文件

解决方法

我为数据库中的存储过程生成了完整的脚本集。当我创建Mercurial存储库并添加这些文件时,它们都以二进制形式添加。显然,我仍然可以获得版本控制的好处,但是会损失很多效率,文本文件的“差异化”等。我验证了这些文件的确只是文本。

为什么这样做呢?

我应该怎么做才能避免这种情况?

有没有办法让汞改变他们对这些文件的看法?

这是变更集日志的片段:

   496.1 Binary file SQL/SfiData/Stored Procedures/dbo.pFindCustomerByMatchCode.StoredProcedure.sql has changed
   497.1 Binary file SQL/SfiData/Stored Procedures/dbo.pFindUnreconcilableChecks.StoredProcedure.sql has changed
   498.1 Binary file SQL/SfiData/Stored Procedures/dbo.pFixBadLabelSelected.StoredProcedure.sql has changed
   499.1 Binary file SQL/SfiData/Stored Procedures/dbo.pFixCCOPL.StoredProcedure.sql has changed
   500.1 Binary file SQL/SfiData/Stored Procedures/dbo.pFixCCOrderMoneyError.StoredProcedure.sql has changed

预先感谢您的帮助吉姆