[Pharo-project] Gofer issue
miguel.coba at gmail.com
Fri Jan 21 16:28:06 EST 2011
El vie, 21-01-2011 a las 13:10 -0800, Dale Henrichs escribió:
> On 01/21/2011 08:11 AM, Miguel Cobá wrote:
> > El vie, 21-01-2011 a las 11:05 +0100, Igor Stasenko escribió:
> >> Okay, i found the solution. Use Installer !
> >> Installer monticello http: 'http://www.squeaksource.com';
> >> project: 'VMMaker';
> >> install: 'CMakeVMMaker'
> >> works well for me and loads correct *latest* version.
> > That isn't a solution and open again a gratuitous discussion about gofer
> > vs installer.
> > The point is, in a distributed SCM system, like Monticello is, there
> > isn't a latest version. At least not by the traditional (suversion for
> > example) way of knowing the monotone numeric integer version number. As
> > Lukas said, the only way to know something is latest is to compare
> > timestamps, but not version numbers or commits id. They aren't not
> > intended to be ordered respect to time.
> > Cheers
> A timestamp isn't sufficient in the presence of branching. How do other
> SCMs identify branches?
I am not an expert, for sure :), but the way Git works AFAICT is by
storing in files the SHA1 hash of all the branches heads reachable.
That is, if you don't have a pointer to the head of a branch you can't
reach the branch, even if the commit is there.
Git also stores a history of the last n branches you have visited in
case you by accident delete the file containing the pointer to a branch
So the metadata of git (.git/ folder) has all this information.
when rebuilding branches histories (and for merging) git traverses the
list of parents of two branches until find two commits with the same id
(SHA1) and from there it can do the merge. But as I said, this is
metadata and the commit has no way of knowing to which branch it
belongs. The commit only know the blog of changes, the author, timestamp
and parent(s) commits (if was a merge).
This is different that monticello where, appears to me, the commit (.mcz
file) encodes the author, branch, version number and package name.
In git, there are only blobs that have a defined structure and are named
just with the SHA1 hash of the bytes changed in that commit.
For more info (very readable) check:
More information about the Pharo-dev