If you are trying to choose between svk and git, let me give you a sample of the pain you can avoid by using git ...
Let's start tracking an SVN repository with svk:
# first make a mirror
svk mirror //mirror/boodebr https://boodebr.googlecode.com/svn/trunk/
svk sync //mirror/boodebr
# of course, disconnected operation doesn't work with the mirror,
# so make a "local" copy
svk cp -p -m "Make local repo" //mirror/boodebr //local/boodebr
# NOW check out a working copy from the local copy of the mirror
svk co //local/boodebr
svk mirror //mirror/boodebr https://boodebr.googlecode.com/svn/trunk/
svk sync //mirror/boodebr
# of course, disconnected operation doesn't work with the mirror,
# so make a "local" copy
svk cp -p -m "Make local repo" //mirror/boodebr //local/boodebr
# NOW check out a working copy from the local copy of the mirror
svk co //local/boodebr
Now with git-svn:
git-svn clone https://boodebr.googlecode.com/svn/trunk/
Merge remote changes into local copy:
svk sync -a
svk smerge -lt .
svk smerge -lt .
Sorry, can't use svk pull because sometimes it gets confused and will make you merge the exact same changes //again// when you push later.
Now with git:
git-svn rebase
Push changes back to subversion:
svk smerge -Ilf .
Except of course when you can predict that will fail, in which case you should have done:
svk smerge -lf .
Push changes with git:
git-svn dcommit
Remove a working copy when you are finished with it:
# don't forget to "disconnect" it or svk will get confused!
svk co -d dir
rm -rf dir
svk co -d dir
rm -rf dir
With git:
rm -rf dir
And this doesn't even touch on issues like ...
- svk has about a zillion dependencies making it brutal to install on anything other than Windows
- svk has no GUIs; you can try the svn GUIs but you have to be really careful not to screw things up
- svk won't let you mirror (and hence checkout) a repository more than once
- even though svk offers "disconnected" operation, you are locally tied to its centralized "depot" and have to remember things like which trees are remote mirrors vs. local mirrors, which working copies you forgot to disconnect, etc. In git, each directory stands alone (like every other distributed VCS).
- ... and of course all the other benefits of git, which are well documented elsewhere.
Written in WikklyText.

Comments
Branching/Merging
...do work in same directory
git checkout master
Switching between branches without adding (staging) applies the changes to the new branch automatically. You can also do
...do work
git commit -a
git checkout master
git pull . foo
I mean, it could be slimmer, but it certainly is painless branching/merging.
mercurial -> git: why?
why did you change from mercurial to git?
mercurial -> git
So, the deciding factor was finally finding a usable VCS GUI tool, nothing really to do with the technical side of things. I would have no problem using mercurial again if it had git-gui and gitk equivalent tools.
Post new comment