For some while I was looking for some handy VCS tool without unnecessary configuration burden. I started with SVN, but recently came across Git . Git is a tool utilized by Linux folks (originated by Linus Torvalds), supporting distributed VCS paradigm. Torvalds motivation follows:
When I say I hate CVS with a passion, I have to also say that if there are any SVN (Subversion) users in the audience, you might want to leave. Because my hatred of CVS has meant that I see Subversion as being the most pointless project ever started. The slogan of Subversion for a while was â€˜CVS done rightâ€™, or something like that, and if you start with that kind of slogan, there’s nowhere you can go. There is no way to do CVS right.
If you’re new to DVCS and know czech, you can read an introduction written by one famous czech blogger Dagi Pichlik. (Btw Git homepage is hosted in czech domain.). The basic idea is that each contributor has his own local repository and propagates his changes to repositories of his colleagues and optional central repository (Integrator).
What is kind of hidden behind the DVCS curtains is the fact, that git alone is (maybe) the most powerful cmdline vcs tool currently available. I was really impressed seeing all possibilities especially history queries like
git log –since=”2 weeks ago”
Git also comes with handy visualiser gitk, which provides view on existing branches, merge points and search capabilities.
DVCS support is again very straightforward, commands for cloning (creates a new repository) and pulling changes from other contributor are simple as they should be (forget CVS switch hell). Creating of branches and merging back is a question of 3 words command at max.
Remote repository can be accessed either by ssh, git native protocol, rsync or http.
Killer features are out-of-box support for cvs and svn repository import, git-svn command (one can work with SVN the git way), stash function (saves the current changeset, restore the actual working copy for another changes and revert back to previous changeset – very handy for adhoc spot fixes) etc.
Where to start:
Small gotcha I faced during the installation:
checking for C compiler default output file name… configure: error: C compiler cannot create executables
assembler (/usr/bin/../libexec/gcc/darwin/i386/as or /usr/bin/../local/libexec/gcc/darwin/i386/as) for architecture i386 not installed
This was caused by previous wild installation of XCode and fixed again by reinstallation of XCode 3.0. 😛