I’ve been doing all my work in Git and pushing to GitHub. I’ve been very happy with both the software and the site, and I have no wish to change my working practices at this point.
My PhD adviser is asking all students to keep their work in an SVN repository that’s hosted at the university. I’ve found tons of documentation and tutorials about to pull down an existing SVN repository into Git, but nothing about pushing a Git repository to a fresh SVN repository. I expect there must be some way to do this with a combination of git-svn and a fresh branch and rebasing and all those wonderful terms, but I’m a Git newbie and don’t feel confident with any of them.
I then want to just run a couple of commands to push commits to that SVN repository when I choose. I wish to keep using Git and just have the SVN repository mirror what’s in Git.
I’ll be the only person ever committing to SVN, if this makes any difference.
I needed this as well, and with the help of Bombe’s answer + some fiddling around, I got it working. Here’s the recipe:
Import Git -> Subversion
After #3 you’ll get a cryptic message like this:
Just ignore that.
When you run #5, you might get conflicts. Resolve these by adding files with state ‘unmerged’ and resuming rebase. Eventually, you’ll be done; then sync back to the SVN repository, using
dcommit. That’s all.Keeping repositories in sync
You can now synchronise from SVN to Git, using the following commands:
And to synchronise from Git to SVN, use:
Final note
You might want to try this out on a local copy, before applying to a live repository. You can make a copy of your Git repository to a temporary place; simply use
cp -r, as all data is in the repository itself. You can then set up a file-based testing repository, using:And check a working copy out, using:
That’ll allow you to play around with things before making any lasting changes.
Addendum: If you mess up
git svn initIf you accidentally run
git svn initwith the wrong URL, and you weren’t smart enough to take a backup of your work (don’t ask …), you can’t just run the same command again. You can however undo the changes by issuing:And remove the section
[svn-remote 'svn']section.You can then run
git svn initanew.