Git-svn
This tutorial collects information for users of git as subversion client, using git-svn. Please consider reading GitSvnCrashCourse, and the git-svn cheatsheet. As Git is distributed, commits (aka change sets) are referenced by hashes instead of svn's serial version numbers. Git tracks contents, not files or directories. Consider to use a real svn client to rename directories, as git-svn produces a lot of renames in svn, instead of one like the original.
Contents |
checkout / clone, log
git svn clone -r 400:HEAD https://mysvnsrv.org/rep/trunk folder # choose a recent commit git log -5 git status git svn info git config --list
Create a .gitignore file on the toplevel to replicate svn's ignore properties.
echo "folder/or/file/to/ignore" > .gitignore
commit
commit to local Git
Git automatically tracks contents and therefor automatically detects all changes done with file browsers, programming tools etc.
git diff git add --all git diff --cached git commit -m "whatebber"
commit to remote SVN
To see what is going to be committed one can choose the following options.
gitk git-svn.. gitk git log remotes/git-svn.. --oneline git svn dcommit --dry-run
To really commit
git svn dcommit
undo changes
Undo (backout, revert) changes and commits is done with standard git commands.
Things already committed to svn can be reverted:
git revert <hash> git svn dcommit
Things in the working tree can be reset (reverted) to what is checked in:
git reset --hard
basic workflow, check out, fix, check in to svn
git svn clone -r 400:HEAD https://mysvnsrv.org/rep ... hack, hack, hack ... git add . git commit -m "qick fix" git dcommit
workflow with quickly setting away your main work and do a quick fix
git svn clone -r 400:HEAD https://mysvnsrv.org/rep git checkout -b bugfix-id-123 ... hack, hack, hack ... git stash "main work, save it for the moment" git stash list ... hack on quick fix ... git commit -m "qick fix" git dcommit git stash pop ... continue hack, hack, hack ...
workflow with local fix/feature branch
git svn clone https://mysvnsrv.org/rep git checkout -b bugfix-id-123 <hack, hack, hack> git add --all git commit -m "fixed issue 123" git checkout master git svn rebase git merge bugfix-id-123 git svn dcommit
Some links
- GitSvnSwitch
- git-svn homepage: http://www.kernel.org/pub/software/scm/git/docs/git-svn.html
- http://trac.parrot.org/parrot/wiki/git-svn-tutorial
- http://maymay.net/blog/2009/02/24/how-to-use-git-svn-as-the-only-subversion-client-youll-need
- Git cheat sheets: Zack Rusin's, in A4 by Jan Krüger, 2 sheets by Jan Krüger
- git-svn on en.wikibooks.org