On 11/29/2014 09:28 AM, Alan Mackenzie wrote: > Speaking as a developer in a project which has just converted to git, I > can assure you that git has tremendous disadvantages, even compared with > cvs.
It depends; they do different things. Depending on what I'm working on, I use either subversion or git; neither is inherently better all the time. > > Principally, git does not have a high level model of version control > concepts, so that using git is somewhat analogous to programming in > assembler. Both give you tremendous control and the ability to do > practically anything, including shooting yourself in the foot. So that > instead of conceptualising a "branch" (as you would do with Mercurial, > Bazaar, Subversion, or even CVS), you need to think about "commits > reachable from a certain head (excluding commits reachable from some > other head)". As far as I can tell, git has a very clear concept of branching. Fast branching was one of the biggest design points in git[1], and they did it by merely making branches pointers to avoid unnecessary copying. So yes, a branch is "commits reachable from a certain HEAD", but conceptually this is the same as other branching models even though it may not be implemented the same way. > git is very difficult to learn, compared with, say Mercurial. To > compare, if you do $ git help branch, you get a man page ~180 lines long > dumped on you, and that's taking up the full width of my 240 character > wide screen. If you do $ hg help branch, you get a 27 line concise > summary, max. ~80 characters wide, which nonetheless is pretty much > complete. > > git has become very popular (much as systemd has), possibly because > programmers are frustrated at not being able to write in assembler any > more. (At least, that's my theory). Like systemd, it has established a > stranglehold on its domain. But severe disadvantages it most definitely > has. > git is extremely popular, which could be a factor in its difficulty; I'm guessing it's had a lot more development hours (and more obscure features) put into it. git is popular because it solved (and still solves) a problem (distributed, parallel development) that at the time was not solved by any other open source DVCS except Mercurial. Both projects started around the same time, and I would imagine that having the Linux kernel team backing git was a compelling reason to choose git over Mercurial. Early on, iirc git was also faster since mercurial uses diffing, not snapshots, and is written in Python. I highly recommend Scott Chacon's "Pro Git": http://git-scm.com/book/en/v2 Alec [1] http://git-scm.com/book/en/v2/Getting-Started-A-Short-History-of-Git