I'm experimenting with git-svn, and am trying to come up with a relatively non error-prone workflow. I think the following should work, and is pretty simple, but I've seen people using far more complicated workflows, so I want to see why.

(master) $ git svn init <path>

(master) $ git svn fetch

(master) $ git svn rebase

(master) $ git checkout -b topic-branch

(topic-branch) $ # HACK HACK COMMIT HACK HACK HACK COMMIT HACK COMMIT

(topic-branch) $ git checkout master

(master) $ git merge topic-branch -- this is a fast-forward merge, so no merge commit

3 Answers
3

Yes, that's essentially what I do when working with Subversion repositories. The key to the simplicity of this is to keep the Git branches local and not try to map them to Subversion branches at all.

I just noticed that you linked directly to my answer in that other question. So perhaps I should explain more. :)

I sometimes do the conflict resolution in the topic branch if I expect some conflict work. Otherwise, if I don't expect many conflicts, I might merge to master first before doing the git svn rebase. It doesn't matter much.

The key point is that Git is so flexible that the minimum workflow is very simple. You've added a topic branch to that; I've added rebasing on the topic branch.

I'm using master branch just for integration with SVN and doing all work on topic-branch, just like I believe you were. I hope this makes more sense, since I couldn't use your workflow the way it was even if it was basically what I wanted - evidently! :-)

More details on the adjustments that were made:

Attention to capital -B on step 4, it will reset the topic-branch so it's always new from current SVN. without it the loop would break giving an error "branch already exists".

Step 7 using rebase rather than merge. yes, it will probably be a fast-forward merge, but it's better safe than sorry. picture if something is done between steps 6 and 7.

Loop to 3 instead of 4. Also, just to play on the safe side. Seems like using svn rebase never is an abuse and since it's always done on master there's always branches as backup.