Granted, it is a bit of a less common use case to call git diff <commit1>:<file1> <commit2>:<file2>
There are valid scenarios for such calls, of course. And sometimes, one may want to compare even files that are stored in subdirectories instead of the top-level directory. Example: git diff cafebabe:t/README bee7e55:t/README Now, the surprising part is that Git tries to read a .gitattributes files interpreting the *entire* prefix `cafebabe:t/` as a *directory path*. I.e. it will try to read the *file* (not the blob) `cafebabe:t/.gitattributes`. A remarkable side effect prevents this from happening for files in the top-level directory: there is no slash in the argument, therefore the top-level .gitattributes (which have been read from the index/worktree already) is used. Unless, of course, one specifies the commit via a ref whose name contains slashes. As mentioned in the commit message of the patch demonstrating the problem, I fear that this issue is *really* hard to fix. Certainly too complicated for me alone. Side note: I was really, really surprised, in a very positive way, that Git handled the scenario gracefully where I *created* files with the actual file paths <commit1>:<file1> and <commit2>:<file2>, i.e. where `git diff <commit1>:<file1> <commit2>:<file2>` is ambiguous because it could refer to two objects or to two files. In this case, Git warns about the ambiguity (it is *slightly* misleading that it says to separate *revisions* using `--`, as we do not want to compare revisions... but it is definitely better than picking one side of the ambiguity and running with it). Git for Windows carries the second patch for ages already, and I would have contributed it much earlier if I had not been busy with other patches. The reason I submit it now is that it conflicts with Duy's fopen_or_warn() patch series. Johannes Schindelin (2): gitattributes: demonstrate that Git tries to read a bogus file mingw: Suppress warning that <commit>:.gitattributes does not exist attr.c | 2 +- t/t0003-attributes.sh | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) base-commit: b06d3643105c8758ed019125a4399cb7efdcce2c Published-As: https://github.com/dscho/git/releases/tag/no-commit-colon-gitattributes-v1 Fetch-It-Via: git fetch https://github.com/dscho/git no-commit-colon-gitattributes-v1 -- 2.13.0.windows.1