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 [email protected]: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 [email protected]:turian/osqa.git
$ git push origin master
To [email protected]:turian/osqa.git
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to '[email protected]: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 [email protected]:turian/osqa
* [new branch] master -> origin/master
From [email protected]: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: refname 'master' is ambiguous.
First, rewinding head to replay your work on top of it...
Applying: Added forum/management/commands/dumpsettings.py
error: Ref refs/heads/master is at 6acd747f95aef6d9bce37f86798a32c14e04b82e but expected a7109d94d813b20c230a029ecd67801e6067a452
fatal: Cannot lock the ref 'refs/heads/master'.
Could not move back to refs/heads/master
rebase refs/remotes/trunk: command returned error: 1
No interaction between them. Just ignore the . git folder for SVN and the . svn folder for Git and you should be fine.
GitHub repositories can be accessed from both Git and Subversion (SVN) clients.
SVN has a Centralized Model. In git every user has their own copy of code on their local like their own branch. In SVN there is central repository has working copy that also make changes and committed in central repository. In git we do not required any Network to perform git operation.
It provides a bidirectional flow of changes between a Subversion and a Git repository. git svn can track a standard Subversion repository, following the common "trunk/branches/tags" layout, with the --stdlayout option.
DESCRIPTION git svn is a simple conduit for changesets between Subversion and Git. It provides a bidirectional flow of changes between a Subversion and a Git repository. git svn can track a standard Subversion repository, following the common "trunk/branches/tags" layout, with the --stdlayout option.
Prefer to use git svn rebase or git rebase, rather than git pull or git merge to synchronize unintegrated commits with a git svn branch. Doing so will keep the history of unintegrated commits linear with respect to the upstream SVN repository and allow the use of the preferred git svn dcommit subcommand to push unintegrated commits back into SVN.
In SVN, a subproject is called an SVN external. In Git, it's called a Git submodule. Although conceptually similar, Git submodules are not kept up-to-date automatically; you must explicitly ask for a new version to be brought into your project.
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:
--prefix=svn/
when cloning so that all of my remote branches from Svn are annotated as such.git co -b local-branch svn/branchname
. Now you have a nice, local area for playing with stuff.git pull origin master
(pull from origin to the master branch).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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With