[问题记录]phabricator上git文件被识别为bin文件

最近在用phabricator的时候有一个cpp文件被识别为bin文件了。查看之后发现上次push中有一个非utf-8字符,导致文件的编码格式变成了ISO-8859

1
2
$ file test.cpp
test.cpp: c program text, ISO-8859 text, with CRLF line terminators

看看里头有哪些不是ASCII编码的,用iconv试着从ASCII转一下:

1
2
$ iconv -f ASCII -t UTF8 test.cpp > output.cpp
iconv: illegal input sequence at position 29203

然后找到这个位置删除非utf8字符删除

之后被卡在了arc diff命令上。本来向phabricator提交需要经过arcanist创建CR通过之后才能提交,但是此处arc一直提示文件有非utf-8字符,导致无法提交。
之前一直查文件的错以为是还有非utf8的字符,或者用:set fileencoding在vim下检查是否编码还是不对。最后在https://secure.phabricator.com/T5229 找到了一个答案。说其实是之前的文件里有非utf-8字符导致的,由于要提交diff,自然之前的文件也被考虑在内,就有这个提示了。

然而直接强行push由于无法绕过master分支的arcanist。通过新建一个dev分支push之后merge进master,merge后可直接push绕过CR,之后在master上开发就会正常了。