From: David Soria Parra Date: Mon, 27 Oct 2008 11:42:42 GMT Subject: Re: [VOTE] git versus mercurial (for DragonflyBSD) Message-ID: <4905A932.2030506@gmx.net> In-Reply-To: <1225100597.31813.11.camel@abelardo.lan> Emanuele Aina schrieb: > Jakub Narebski precisò: > >>> What do you mean by "cleaner design"? >> Clean _underlying_ design. Git has very nice underlying model of graph >> (DAG) of commits (revisions), and branches and tags as pointers to this >> graph. > > Just for reference, the abstract history model of Mercurial and GIT is > the same, a DAG of changesets identified by their cryptographic hash as > designed for Monotone, which can be considered the parent of both. > > GIT and Mercurial then differs in how this abstract model is written to > disk, with different tradeoffs in terms of performances and how easily a > specific feature can be implemented, but there is no reason something > can be done in GIT but not in Mercurial or viceversa. Yes, it's the same: a DAG with hashes. But there are limitations due to the implementation (and not the design). Just as a bad and completely useless example (don't start to argue, I know it's nothing someone would like to have): you cannot force mercurial to merge two revisions and create a merge commit if one is the others ancestor,which is possible in git with git --no-ff. In addition they differ in some other ways: Mercurial doesn't have an index to stage commits, which is something that git has and allows very powerful features (such as git add -i, etc).