Alex Rivera | Logout

Tracking upstream svn changes with git-svn and github?

Asked 2010-05-08T21:05:49.897
12

How do I track upstream SVN changes using git-svn and github?

I used git-svn to convert an SVN repo to git on github:

$ git svn clone -s  http://svn.osqa.net/svnroot/osqa/ osqa
$ cd osqa
$ git remote add origin git@github.com:turian/osqa.git
$ git push origin master

I then made a few changes in my git repo, committed, and pushed to github.

Now, I am on a new machine. I want to take upstream SVN changes, merge them with my github repo, and push them to my github repo. This documentation says: "If you ever lose your local copy, just run the import again with the same settings, and you’ll get another working directory with all the necessary SVN metainfo."

So I did the following. But none of the commands work as desired. How do I track upstream SVN changes using git-svn and github? What am I doing wrong?

$ git svn clone -s  http://svn.osqa.net/svnroot/osqa/ osqa
$ cd osqa
$ git remote add origin git@github.com:turian/osqa.git
$ git push origin master
To git@github.com:turian/osqa.git
 ! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to 'git@github.com:turian/osqa.git'
$ git pull
remote: Counting objects: 21, done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 17 (delta 7), reused 9 (delta 0)
Unpacking objects: 100% (17/17), done.
From git@github.com:turian/osqa
 * [new branch]      master     -> origin/master
From git@github.com:turian/osqa
 * [new tag]         master     -> master
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either.  Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details on the refspec.
...
$ /usr//lib/git-core/git-svn rebase
warning
Edit
Report

1 Answer

5

It looks like, with the exception of your rebase, everything happened as expected, but with a lot more verbiage that you might expect. Here's what I think I would do to create/integrate the bits on a new machine:

  1. Clone your Svn repository. Ideally, I'd like to start with the git repo because it's yours and it's in a known state, but I don't know of any way to initially pull content from Svn than to clone it. I like to add a --prefix=svn/ when cloning so that all of my remote branches from Svn are annotated as such.
  2. Add your origin (just like you've done).
  3. Create a local branch for working. git co -b local-branch svn/branchname. Now you have a nice, local area for playing with stuff.
  4. Ensure that you're on that local branch you just created (you should be).
  5. Pull from Github. You've done this correctly, but ambiguously. To clear up the ambiguity, be explicit: git pull origin master (pull from origin to the master branch).
  6. Rebase from Svn to sync everything up. git svn rebase.

I haven't tried this, but it's a pretty typical workflow and the errors you're getting don't seem to be related to your service of two remotes (Svn and Github). They appear to be a bit more generic and related to your workflow and how you're calling the commands.

answered 2010-05-10T14:01:19.143

Your Answer