[SciPy-dev] Git-svn sub-optimality

Pauli Virtanen pav@iki...
Sun Mar 8 09:04:22 CDT 2009

Sun, 08 Mar 2009 17:31:24 +0900, David Cournapeau wrote:

> Pauli Virtanen wrote:
>> Hi David (& other prospective git-svn users),
>> I just ran into a speedbump with git-svn and using the Git mirror:
>>     http://projects.scipy.org/numpy/wiki/GitMirror#Abigfatwordofwarning
>> In short: apparently git-svn does not automatically track SVN commits
>> appearing elsewhere than locally via `git-svn fetch/rebase`. So if you
>> want to `dcommit` after `git fetch`ing from the mirror or from someone
>> else, the database of git-svn needs to be rebuilt:
>>     rm -rf .git/svn
>>     git svn rebase -l
>> Otherwise, the `dcommit` will shove bogus changesets to SVN. (Ouch!)
> Hm, do you have an example of that ? It never happened to me. My typical
> usage is when I start working on numpy is:
> git svn fetch --all
> git co master && git svn rebase -l
> git co -b line_of_work
> When I use dcommit, it first rebase my changes on top of svn last
> revision if the last svn revision differs from the on I have locally.

It doesn't occur if you stick to the usual git-svn workflow of getting 
SVN commits via `git svn fetch/rebase` only. An example where it occurs is

    git fetch mirror      # fetch branch from mirror or from someone else
    git rebase svn/trunk  # rebase on it
    git svn dcommit -n    # now try to dcommit

Now git-svn thinks the current branch still corresponds to the old 
version, and uses that as the base for `dcommit`. However, doing `git svn 
rebase` does not fix the situation, since `git-svn` also thinks that the 
current branch is based on the latest commit, and is so up-to-date.

I'll also note that if you do merges and then `dcommit` the result, this 
makes the tree generated by `git-svn` diverge from the one in the mirror 
(since in the mirror the merge commit has only one parent, but in the 
private tree it has two -- `git-svn fetch` doesn't track merges).

Pauli Virtanen

More information about the Scipy-dev mailing list