![Git 涂抹并清洁过滤器](https://linux22.com/image/1508960/Git%20%E6%B6%82%E6%8A%B9%E5%B9%B6%E6%B8%85%E6%B4%81%E8%BF%87%E6%BB%A4%E5%99%A8.png)
我在 git 存储库中有一些文件,它们是 unicode 制表符分隔值文件。我知道这些文件在生成时是 UTF-8 或 UTF-16 编码的。
对于我的 Windows 工作站,有时我想在 Excel 中编辑它们(不要问),我想将它们转换为 UTF-16,无论它们是以 UTF-8 还是 UTF-16 到达。
但另一方面,我确实总是希望在存储库的内部表示中使用 UTF-8。(我还希望差异有意义,因此相同的“从任何内容到 UTF-8”适用于属性diff
。)
目前,我的.gitattributes
定义
*.tsv diff=winutf16 filter=winutf16
意思是 (.git/config
)
[filter "winutf16"]
clean = iconv -f utf-16 -t utf-8
smudge = iconv -f utf-8 -t utf-16
required
[diff "winutf16"]
textconv = iconv -f utf-16 -t utf-8
鉴于我知道它只是这两个 Unicode 编码选项之一,我应该能够使用类似的方法获取编码-f $(file -b --mime-encoding file.tsv)
,但这需要我指定一个文件名,而文档指出
在签出时,如果指定了 smudge 命令,则该命令将从其标准输入中获取 blob 对象,并使用其标准输出来更新工作树文件。同样,在签入时,clean 命令用于转换工作树文件的内容。
所以我得到的只是一个 blob 到 stdin,一次。
有没有一种干净的方法可以在 Windows 上执行此操作而无需安装超出已经暗示的内容?