I m trying out git-svn and I am getting the following error. What I've done so far is
git svn init -T <my svn repo>
then I've been committing to my repository with
git commit -a
then once I did a few of those I did a
git svn fetch
and then I tried a
git svn dcommit
However, that fails with
Unable to determine the upstream SVN information from HEAD history.
Perhaps the repository is empty
I can also see that the files in my file system are not marked as being used by svn (not sure if this should happen or not) though. If I browse the svn repository (with repo browser) I can see that the original files are there.
After this original failure I tried rebasing without much success (it throws some other error).
The git svn
commands are similar to dealing with a normal remote (the svn remote is named git-svn
). fetch
just downloads commits from the remote, it doesn't connect them to your tree in any way. It will work if you fetch right after initing, since you don't have a tree yet, but you committed first. You want to use git svn rebase
, which will rebase your tree onto the svn head. Normally you git svn fetch
right after git svn init
, or just use git svn clone
, which does both. Once the initial repository is set up you can just use git svn rebase
all the time, which fetches and rebases in one operation
I found that, when the SVN repo was empty git-svn throws
Unable to determine upstream SVN information from HEAD history
So using SVN I checked in a text file as the first commit
svn add test.txt; svn commit -m "test file"
Then I was able to do a git svn clone and that fixed everything.
This site fixed the issue for me: http://eikke.com/importing-a-git-tree-into-a-subversion-repository/. Direct quote:
The issue is that the SVN metadata has been lost. To fix this, we can
use a Git graft to link them. We’ll tell Git the commit which created
the SVN folder in which we want to store the project is the parent
commit of the first commit in our Git repository:
$ git show-ref trunk
> 741ab63aea786882eafd38dc74369e651f554c9c refs/remotes/trunk
$ $ git log --pretty=oneline master | tail -n1
> 88464cfdf549a82b30ee7c52e53e2b310f0d9ec4 Initial version
$ echo "88464cfdf549a82b30ee7c52e53e2b310f0d9ec4 741ab63aea786882eafd38dc74369e651f554c9c" >> .git/info/grafts`
Is it a general git-svn
limitation? Or exists the problem between keyboard and chair?
This error message was introduced in git 1.5.1 (Feb. 2007) by commit a8ae262
Since you're committing from HEAD (or another commit that is a parent of HEAD), you'll be able to find a commit with metadata information containing the SVN URL that your HEAD was descended from anyways.
So git needs to find a commit including the SVN URL in order for a dcommit of one of your branch to work properly.
Or exists the problem between keyboard and chair?
That can happen if you select one of your branch created before git svn clone
. You need to work with branches created on top of the ones imported from SVN by git svn clone
.
Just a guess, try git svn clone, then change/commit files, then git svn dcommit. This is the way I usually do it and it works (in my case).