git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  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).