I've found myself far more productive and make heavy use of feature branches and squashed commits for my day job, so when I hack on mono, I really enjoy being able to leverage the same capabilities.
By "squashed commits", I guess I should really say, leveraging the power of a distributed version control system that lets me break down a task into many smaller steps, commit each step individually, then squashing the whole thing down to one patch that I can post to mono-devel for review.
So do you set things up to use git with Mono?
cd /usr/local/src/Note: the above recipe copies the svn history only back to revision 86200. You can pick any valid svn revision number you like, or if you want the full revision history see this page on the Mono wiki.
mkdir mono && cd mono
mkdir mcs && cd mcs
git-svn init svn+ssh://username@mono-cvs.ximian.com/source/trunk/mcs
git-svn fetch -r 86200 && git-svn fetch
cd ..
mkdir mono && cd mono
git-svn init svn+ssh://username@mono-cvs.ximian.com/source/trunk/mono
git-svn fetch -r 86200 && git-svn fetch
Ok. Everything's setup. Now what?
First, let's say I want to hack on some ASP.NET ashx page bug. I'll setup a local branch "ashx" to store whatever code I write/change:
git-checkout -b ashxNow I have two branches: "master" which was setup by git-svn above, and "ashx" which I just created and switched over to. Now, I can:
emacs -nw class/System.Web/...Ok, now to post a message to mono-devel:
git-commit -a -m "1st step"
emacs -nw class/System.Web/...
git-commit -a -m "2nd step"
emacs -nw class/System.Web/...
git-commit -a -m "3rd step"
git-diff master ashx > ~/Bug6884.fixWhen everything looks good and no one has any complaints, I can finally commit back to mono's svn repository with:
mutt
git-branch masterThis "squashes" my commits down into one batch of changes on the master branch, which I then commit and push to svn repo.
git-pull --squash --summary . ashx
git-commit -a -m "message for mono's svn"
git-svn dcommit
Finally, How do I update my local tree?
git-svn fetch && git-svn rebase remotes/git-svnNote: This will update the current branch you are on locally.
Hope someone finds this helpful!
1 comment:
Thanks for the post - it helped me get a better overview on how to use git with svn.
Post a Comment