Re: behaviour of git diff, GIT_DIR & checked out tree
From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:43:36
Hi, On Mon, 24 Sep 2007, David Tweed wrote:
In a git tracked tree rooted at $HOME/V with
git-dir of $HOME/V/.git, if I'm in $HOME/V then
git diff master@{midnight}
tells me the difference between the current modified files
in the tree being tracked in V and the specified commit. In
a different directory, OUTSIDE of $HOME/V, I tried
env GIT_DIR=$HOME/V/.git git diff master@{midnight}
to get the same effect but, whilst I do get a diff output, it
looks like a diff of the commit against an empty tree.
Yes, this is fully expected.
The @{time} notation accesses the _reflogs_, which are purely local
beasts. They are not transmitted when cloning.
The rationale: in a distributed environment, you cannot trust others'
timestamps. Therefore we don't.
We can only (to a certain extent, at least) trust our _own_ timestamp.
That is why we have timestamp access to the reflogs (which are purely
local, as I mentioned above), but we have no way to reference commits by
timestamp otherwise.
Hth,
Dscho