From: Linus Torvalds <torvalds@osdl.org>
To: Matthew L Foster <mfoster167@yahoo.com>
Cc: Jeff King <peff@peff.net>, git@vger.kernel.org
Subject: Re: git and time
Date: Tue, 26 Sep 2006 18:58:48 -0700 (PDT) [thread overview]
Message-ID: <Pine.LNX.4.64.0609261849430.3952@g5.osdl.org> (raw)
In-Reply-To: <20060927002745.15344.qmail@web51005.mail.yahoo.com>
On Tue, 26 Sep 2006, Matthew L Foster wrote:
>
> It's true I don't know much about git, what is the difference between a
> changeset and a snapshot?
Some of it is just semantic, but a lot of it has real user-visible meaning
simply because of the "mental model" difference, so the semantics actually
have some meaning.
A lot of systems think of commits as "what changed", and thus the
"changeset" mentality. A "commit" is just the combination of all changes
that that commit introduced.
Git very fundamentally does not think like that at all.
Git thinks of a commit as a _state_, and the history that led up to that
state. So instead of the commit actually containing pointers to what
changed, it very much contains a pointer directly to the actual state that
was committed (a "tree" in git parlance), and then a set of pointers to
the "parent" commits - the commits that explain where we came from.
Now, in some sense, you can ignore the difference between the two models,
since you'd think that they are totally equivalent: from the git model,
you can always get the "changeset" by just diffing the current state with
the previous state, and conversely from the "changeset" model you can
always get the "current state" by just applying the changeset to the
previous state.
So in that sense, it's just two different ways of looking at exactly the
same thing.
HOWEVER. The fact that git internally thinks in terms of "snapshots" means
that it makes no sense to (for example) record a "file rename". Git
figures it out on its own, by just looking at the state before and after.
The great thing about that is that the exact same logic actually works
even for _unconnected_ states/snapshots, in a way that a "changeset" based
situation would find very hard.
So this is when the otherwise semantic difference actually shows itself.
You can diff between two arbitrary points in time, and git will figure out
renames on its own, without actually ever looking at the changesets in
between (in fact, there may not even _be_ a straight, unbroken chain of
changesets between the two states).
> Are you saying timestamps should be tracked separately or tracked by an
> scm system built on top of git? Does/should git care about the when of a
> snapshot?
Git does record the timestamp, but it records it in the same way it
records the "username" - in that it doesn't really _matter_ to git. It
never actually affects any meaning (well, since you can query for it, it
has a meaning of sorts, but it's strictly limited to any explicit queries,
so if you do "git log --since=2.weeks.ago" it will use the timestamp to
give you what you want, but it doesn't actually affect anything
important).
So think of the timestamps as just comments with a very specific format.
Linus
next prev parent reply other threads:[~2006-09-27 1:59 UTC|newest]
Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-09-26 23:23 git and time Matthew L Foster
2006-09-26 23:27 ` Johannes Schindelin
2006-09-26 23:32 ` Jakub Narebski
2006-09-26 23:33 ` Jeff King
2006-09-27 0:27 ` Matthew L Foster
2006-09-27 1:11 ` Junio C Hamano
2006-09-27 8:42 ` Andreas Ericsson
2006-09-27 15:28 ` Jeff King
2006-09-27 14:09 ` Matthew L Foster
2006-09-27 14:29 ` Andreas Ericsson
2006-09-27 18:01 ` Matthew L Foster
2006-09-27 18:10 ` Linus Torvalds
2006-09-27 20:44 ` Matthew L Foster
2006-09-27 20:51 ` Linus Torvalds
2006-09-27 21:16 ` Matthew L Foster
2006-09-27 21:01 ` Linus Torvalds
2006-09-27 21:44 ` Matthew L Foster
2006-09-27 21:48 ` Linus Torvalds
2006-09-27 22:28 ` Matthew L Foster
2006-09-27 22:54 ` Linus Torvalds
2006-09-27 23:02 ` Shawn Pearce
2006-09-27 23:14 ` Linus Torvalds
2006-09-28 0:12 ` Matthew L Foster
2006-09-28 0:21 ` Jeff King
2006-09-28 0:23 ` Shawn Pearce
2006-09-28 1:39 ` Matthew L Foster
2006-09-28 2:21 ` Linus Torvalds
2006-09-29 7:52 ` Andreas Ericsson
2006-09-29 14:09 ` Johannes Schindelin
2006-09-29 14:21 ` Andreas Ericsson
2006-09-28 1:23 ` Junio C Hamano
2006-09-28 1:48 ` Matthew L Foster
[not found] ` <20060927220404.8e216945.seanlkml@sympatico.ca>
2006-09-28 2:04 ` Sean
2006-09-28 2:49 ` Matthew L Foster
2006-09-28 2:43 ` David Lang
[not found] ` <20060927230330.90c63d23.seanlkml@sympatico.ca>
2006-09-28 3:03 ` Sean
2006-09-28 3:26 ` Tom Prince
2006-09-28 13:17 ` Theodore Tso
2006-09-28 14:50 ` Matthew L Foster
2006-09-28 15:29 ` Rogan Dawes
2006-09-28 16:55 ` Matthew L Foster
2006-09-28 17:11 ` Linus Torvalds
2006-09-28 17:28 ` Junio C Hamano
2006-09-28 17:33 ` Matthew L Foster
2006-09-28 17:42 ` Johannes Schindelin
2006-09-28 19:43 ` Matthew L Foster
2006-09-28 19:50 ` Shawn Pearce
2006-09-28 22:29 ` Matthew L Foster
2006-09-28 22:35 ` Johannes Schindelin
2006-09-28 22:55 ` Matthew L Foster
2006-09-29 8:16 ` Andreas Ericsson
2006-09-28 18:01 ` Linus Torvalds
2006-09-28 19:18 ` Matthew L Foster
2006-09-29 0:27 ` Theodore Tso
2006-09-29 1:44 ` Matthew L Foster
2006-09-29 2:28 ` Junio C Hamano
2006-09-28 20:36 ` Robin Rosenberg
2006-09-28 20:46 ` A Large Angry SCM
2006-09-28 22:12 ` Matthew L Foster
2006-09-28 22:25 ` A Large Angry SCM
2006-09-28 22:31 ` Matthew L Foster
2006-09-28 22:45 ` Matthew L Foster
2006-09-28 3:07 ` Nicolas Pitre
2006-09-28 3:39 ` Tom Prince
2006-09-28 3:47 ` Shawn Pearce
2006-09-28 4:07 ` Junio C Hamano
2006-09-28 1:36 ` Theodore Tso
2006-09-28 2:29 ` Matthew L Foster
2006-09-28 2:51 ` Nicolas Pitre
2006-09-28 4:03 ` Junio C Hamano
2006-09-28 14:34 ` Nicolas Pitre
2006-09-28 16:05 ` Junio C Hamano
2006-09-29 22:27 ` Junio C Hamano
2006-09-30 4:50 ` Shawn Pearce
2006-09-30 7:28 ` Junio C Hamano
2006-09-30 17:36 ` Linus Torvalds
2006-09-30 23:04 ` Junio C Hamano
2006-10-01 0:13 ` Linus Torvalds
2006-10-01 0:24 ` Junio C Hamano
2006-10-01 8:07 ` Junio C Hamano
2006-10-01 8:37 ` Johannes Schindelin
2006-10-02 23:50 ` Jakub Narebski
2006-09-29 20:42 ` Jakub Narebski
2006-09-27 21:56 ` Shawn Pearce
2006-09-27 22:46 ` Matthew L Foster
2006-09-27 22:57 ` Shawn Pearce
2006-09-27 18:53 ` Andy Whitcroft
2006-09-27 16:29 ` Linus Torvalds
2006-09-27 18:00 ` Edgar Toernig
2006-09-27 18:09 ` Linus Torvalds
2006-09-29 20:58 ` Jakub Narebski
2006-09-27 1:58 ` Linus Torvalds [this message]
2006-10-03 0:01 ` Jakub Narebski
2006-09-27 3:34 ` Jeff King
[not found] ` <20060926234309.b16aa44e.seanlkml@sympatico.ca>
2006-09-27 3:43 ` Sean
2006-09-27 4:50 ` Junio C Hamano
[not found] ` <20060927010437.5fa57ed0.seanlkml@sympatico.ca>
2006-09-27 5:04 ` Sean
2006-09-27 5:52 ` Jeff King
[not found] ` <20060927021529.69fd7274.seanlkml@sympatico.ca>
2006-09-27 6:15 ` Sean
2006-09-27 4:28 ` Shawn Pearce
2006-09-27 4:53 ` Junio C Hamano
2006-09-27 10:13 ` Junio C Hamano
2006-09-27 15:11 ` Shawn Pearce
2006-09-27 20:46 ` Junio C Hamano
2006-09-27 21:36 ` Shawn Pearce
[not found] ` <20060927002745. 15344.qmail@web51005.mail.yahoo.com>
2006-09-27 0:56 ` Sean
[not found] ` <20060926205632.5d487cc9.seanlkml@sympatico.ca>
2006-09-27 0:47 ` David Lang
[not found] ` <20060926210721.36eb509d.seanlkml@sympatico.ca>
2006-09-27 1:07 ` Sean
2006-09-27 1:34 ` Junio C Hamano
2006-09-27 1:31 ` David Lang
[not found] ` <20060926215836.f4a25297.seanlkml@sympatico.ca>
2006-09-27 1:58 ` Sean
2006-09-27 2:31 ` Junio C Hamano
[not found] ` <20060926224133.714337eb.seanlkml@sympatico.ca>
2006-09-27 2:41 ` Sean
2006-09-29 17:37 ` Jan Harkes
[not found] ` <20060929134616.7966d18c.seanlkml@sympatico.ca>
2006-09-29 17:46 ` Sean
-- strict thread matches above, loose matches on Subject: below --
2006-09-28 0:49 apodtele
2006-09-28 16:53 ` Linus Torvalds
2006-09-28 16:50 apodtele
[not found] <20060928170110.GD3650@socrates.priv>
2006-09-28 17:30 ` Matthew L Foster
2006-09-28 18:21 apodtele
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.64.0609261849430.3952@g5.osdl.org \
--to=torvalds@osdl.org \
--cc=git@vger.kernel.org \
--cc=mfoster167@yahoo.com \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).