On Mon, 27 Oct 2008, Arne Babenhauserheide wrote: > Am Monday 27 October 2008 13:48:38 schrieben Sie: >>> All in all it's a UI issue - while the git UI bit me quite often, the >>> Mercurial UI just works. >> >> But _that_ might be because you are used to Mercurial UI, isn't it? > > I rather think it is because I was used the Subversion UI before I tried git > and Mercurial. I think Mercurial UI is more compatibile with Subversion UI than Git; additionally Mercurial uses separate, different names to avoid ambiguities: examples are 'hg rollback' and 'hg backout' for commands which various SCM name reset and revert, sometimes referring to one and sometimes to the other. AFAIK Git mostly follows BitKeeper UI; it is quite natural as it was meant as replacement for BitKeeper for Linux kernel development. [...] > Also, Mercurial is Python based with quite readable code and it's very easy to > create extensions for new uses, when I need them. > > If you know Python, creating a new Mercurial extension isn't harder than > creating a shell chain command for git, but it feels much cleaner and is > nicely integrated once it's done. You can even change the operation of basic > commands very easily without having to touch any existing code. There are advantages and disadvantages to each method. Git was developed in true Unix tools style, as described in TAOUP i.e. "The Art of UNIX Programming" by ESR (http://catb.org/esr/writings/taoup/html/) In "Programming Pearls" by Jon Bentley there is in one of chapters description of prototyping 'spell' using ready UNIX tools, pipelines, and a few of custom tools, to examine the needs of 'spell'. One of the consequences of this type of design is that there isn't (yet?) something like git library; this is caused by the fact that tools (plumbing) that make up git are designed to run once, and let operating system take care of freeing resources. On the other hand clean and clear design of git repository made it possible to create native Git (re)implementation in Java: the JGit project. (Well, Git is GPLv2 and JGit/Egit is BSD 3-clause/EPL, so reimplementation might have been needed for licensing purposes anyway. Well, it is not _full_ implementation yet... Besides is writing plugin in Python for Mercurial that much easier than writing new command or stuff in C for Git? Well, perhaps it is, as only recently there began to appear API documentation, and there were created utility mini-libraries like strbuf, or string_list, or parseopt. Also often third-party projects or stuff in contrib gets incorporated into git proper; sometimes stuff is moved from git core to contrib, if there is no maintainer however (git-svnimport, git-p4import). Git repository has many roots: one from git core, one with gitk (graphical history viewer), one from what was git mail tools, one with gitweb (web interface), and one with git-gui (graphical commit tool). The extending via plugins idea used by Mercurial, so succesfull IMHO for Firefox, and I think quite successfull for ikiwiki for example, is not without drawbacks, especially that there is no plugins clearinghouse, and plugins are required for what is considered pretty required functionality, like bisect before hg 1.0. See also blog post on vcscompare: "Plugins In Version Control" http://vcscompare.blogspot.com/2008/06/plugins-in-version-cotnrol.html -- Jakub Narebski Poland -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html