.gitattributes UTF-16 to text or JSON by filename without extension

.gitattributes UTF-16 to text or JSON by filename without extension

我有很多没有扩展名的文件。我有一个名为“model”的文件和另一个名为“schema”的文件,我知道它们都是 UTF-16。 “模型”和“模式”都没有扩展名,因此在尝试 git diff 时被强制为二进制。我想使用 .git 属性将“模型”转换为 UTF-8 并将“模式”转换为 JSON,以便我可以比较差异。

Q1. 如何指定不带扩展名的单个文件名才能正确解码?

Q2. 我不想添加 bash 脚本或更改 git --global 设置,以便其他人更容易使用。

除了仅使用 *model diff=utf16 和 git 配置文件外,我无法从 the docs. I tried following this solution 中找到任何示例:

[diff "utf16"]
textconv = "iconv -f utf-16 -t utf-8"

但这没有用。我在 VScode 和 bash (Ubuntu20.04) 上都试过了。

更新: @torek 向我指出了有用的 Git 调试 tool。这是 GIT_TRACE=1 git diff

的输出
09:58:09.927031 git.c:439               trace: built-in: git diff
09:58:09.951640 run-command.c:663       trace: run_command: unset GIT_PAGER_IN_USE; LESS=FRX LV=-c pager

Q1 解决方案 @torek 和@jthill 都帮助确认问题出在我这边。上面的解决方案应该有效,但我的本地 git 配置没有指向 .gitconfig 文件。我更新了 .git/config 文件并且它起作用了。

Q2 解决方案 您必须为每个 repo 编辑一次全局设置以引用 .gitconfig。我试过跟随 this solution 但似乎无法让它恢复到回购工作树根目录中的 .gitconfig 文件。

so are forced to binary

通过什么?

我愿意:

$ echo '/Makefile myattr=test' >.git/info/attributes
$ git ls-files ':(attr:myattr=test)' 
Makefile
$ echo 'Makefile myattr=test' >.git/info/attributes
$ git ls-files ':(attr:myattr=test)' | wc -l
24

所以有 24 个 Makefile,锚定模式只匹配我想要的特定模式,因为我锚定了路径。

因此,如果该文件位于工作树根目录中,请将 /model diff=utf16 放入您的 .gitattributes 中。