working with git-svn (was ...)

Derek Atkins derek at
Mon Jul 1 17:56:35 EDT 2013

On Mon, July 1, 2013 5:41 pm, John Ralls wrote:
>> Why can't I:
>> ( cd master-repo && git-svn-mirror )
>> git clone --local -b <branch> master-repo branch-wc
>> cd branch-wc
>> ...
>> git-update
>> (do work)
>> git commit  (do I need to do this? -- I'm guessing I do)
>> git svn dcommit
> That's what I'm suggesting.

It seemed like you were suggesting more than this.  Basically I'm asking
if this would work:

[SVN REPO] -(git svn)> [GIT SVN (master-repo)] -(git)> [branch wc]
    ^                                                      |
    +----------------- (git svn dcommit) ------------------+

(where I would use either git-svn or git-svn-mirror in the first link,
and use git svn dcommit to push back from the branch wc to SVN)

>        Note that git-svn-mirror can push to a
> bare repo, but won't if one isn't specified with --git-repo. Git svn
> operates on a working repo, and git-svn-mirror uses git svn
> (via the perl API that's part of git) to fetch from the SVN repo. As long
> as you always dcommit from your WC and use git-update to keep the refs
> pointed
> in the right place, it should work fine. The bare repo thing is there just
> to
> be able to work with Github or Gitolite. Git-svn-mirror will whine if
> there's
> nothing to push to, but it will still work OK.

In my case there is no reason to have git-svn-mirror push to anything.  At
least, I don't see any reason to push to anything.

>>> Granted, you can script a lot of that, but it's still more work than
>>> having an intermediate maintained with
>>> git-svn-mirror from on your home
>>> network
>>> and updated via a commit
>>> hook or a cron job. Then you can git-update; git-svn-dcommit in each WC
>>> as
>>> needed without having to be
>>> bouncing between the git-svn-master and the WC for every batch of
>>> commits.
>>> Your laptop can have a
>>> mirror clone of the intermediate just as you're planning for Gnucash in
>>> order to consolidate fetches.
>> What does git-svn-mirror do specially, beyond what a git svn fetch would
>> do in a "pull-only" repo?  I'm asking because I do not know exactly how
>> the existing git-svn repo is pulled/updated at work (yes, there is on).
>> So *theoretically* I could clone --mirror that one similarly to how I'd
>> work with the gnucash tree, but I'd only do that if I could dcommit back
>> without causing issues.  And honestly I don't know how to test that
>> without actually doing a commit.
> Git-svn-mirror's main job is to deal with the different way tags
> are handled in SVN and git: In SVN they're really branches, and in git
> they're
> just references. Git svn makes them git branches, then git-svn-mirror
> turns
> the tag branches into git tags. That works much better when you're using
> a git visualizer like gitk -- as long as nobody commits changes to a tag,
> which
> is fine with SVN but will cause trouble with git.

Okay, so the main thing that git-svn-mirror does beyond raw git-svn is
converting svn tags to git tags?  Is that the only thing?  If so, I
probably don't really care that much for work..

> As long as you dcommit back, the repo at the office won't be able to tell
> whether
> you committed with SVN or git. Do use git-update even if the office repo
> isn't
> changing the SVN tags into git tags (git update doesn't actually do
> anything with
> that) it will help keep your git svn pointers working correctly.

Okay, so I should always use git-update in my wc checkout, where I plan to
dcommit back, regardless whether upstream is using raw git-svn or
git-svn-mirror?  Got it.

Welcome to the brave new world.


       Derek Atkins                 617-623-3745
       derek at   
       Computer and Internet Security Consultant

More information about the gnucash-devel mailing list