Git sucks, or why do I use darcs instead
This article is my small individual experience of using version control systems. It's for your information.
Where git sucks
Git is too simple and stupid for me
git - the stupid content tracker
Linus Torvalds, man git
First, I want to use revision control systems for all possible thoughts which can come in my head.
Darcs has a nice patch theory describing what I can do with history and what I can't because of dependency problems. Git's history seems to me like a store of diffs which lay one by one with no way to take a bottom one without touching an upper. It looks like using “cp -r
revision control system”, the only difference is that it takes less of disk space.
No dependency controlling
Just see this video to understand what is it. It shows it very clear.
Interactive mode sucks
It's what darcs has by default and git hasn't.
Interactive mode is usually annoying in command-line tools, but not when I need to know, what I really do with my code. It's also simplifies partial commits very much.
Reverting old commits sucks
How can I revert an old change only in the chosen file? In darcs, I can do darcs unrecord
or darcs obliterate
and follow its instructions. In git, I can devise only:
git diff <commit>..<commit>^ <file> | git apply -
And no dependency analysis will be performed. Just a diff. Simple and stupid.
No tracking of past file locations
In darcs, I can can see what happened with file which was in the working copy but for now it doesn't exists:
[komar@pavilion ~/k.b.n/ru]$ darcs changes -s web
Changes to ru/web:
Mon Apr 18 00:42:28 MSD 2011 Alexander Markov <[email protected]>
* mv */web */location
./en/web -> ./en/location
./ru/web -> ./ru/location
This feature I use in this wiki. Try to go at /en/web and you will be redirected to /en/location. How can I get the same in git? If somebody knows, let me know, because I need it to add this feature to my site’s engine code.
By the way, here's a recipe for mercurial:
hg export -g -r `hg log --template '{node}' -l1 --removed MOVED_FILE_NAME` | grep '^rename'
Unicode support sucks
By the way, new version of darcs fucks up unicode commit messages, so "выкатываем этот стыд"
becomes "2K:0BK205< MB>B ABK4"
. Darcs developers won't fix it.
Code sharing sucks
What we need to share read-only darcs repo? A webserver. Just put your repo on http and everybody will be able:
to browse working copy via http (http://komar.in/darcs/memcache-ocaml/);to download full repo withdarcs get http://komar.in/darcs/memcache-ocaml/
.
In git, we need a... Hm... Github?
Of course, you can run some crutches, but it's not too simple.
The problem is solved:
git --bare update-server-info
mv hooks/post-update.sample hooks/post-update
chmod a+x hooks/post-update
Where git rocks
Git's performance rocks
Git is very fast. Nuff said.
If you need to create a really huge repo, just use git.
The only haskell thing that works good is xmonad. I used it for years and still very happy with it.
The only haskell things that works fast are qsort and shootout tests.
The other haskell soft is full of shit and I can't understand why.
Gits' branches rock
The same. If you really need to use branches, use git.
Git vs CVS vs SVN vs Mercurial vs Bazaar
And don't think what CVS, SVN, mercurial or bazaar is better than git. It's not truth, these version control systems are much worse. You can read about it below.
Links
- Why Git is Better than X
- Video about camp — “This video explains all!”
- Darcs's patch theory on wikibooks — there are more images here
- When should you branch? — describes how darcs users can live without branch support
- Bazaar vs Git — humorous work by python-minded ubuntu creators
- Cutting Edge Revision Control — there is small benchmark here too