All of lore.kernel.org
 help / color / mirror / Atom feed
From: John Locke <mail@freelock.com>
To: Michael J Gruber <michaeljgruber+gmane@fastmail.fm>
Cc: git@vger.kernel.org
Subject: Re: git svn clone a non-standard repository
Date: Thu, 26 Jun 2008 11:29:50 -0700	[thread overview]
Message-ID: <4863E01E.9050108@freelock.com> (raw)
In-Reply-To: <g3to0t$35n$1@ger.gmane.org>

Hi, Michael,

Michael J Gruber wrote:
>>
>> moduleA/trunk <- contains trunk development of moduleA
>> moduleA/tags   <- empty
>> moduleA/branches <- empty
>> moduleB/trunk
>> moduleB/tags
>> moduleB/branches
>> moduleC/trunk
>> moduleC/tags
>> moduleC/branches
>> moduleD/trunk
>> moduleD/tags
>> moduleD/branches
>
> All of those module?/{tags,branches} are empty, right? I assume 
> branches follow the pattern below for tags.
Yup.

>
>> moduleE/trunk <- I don't care about this one...
>> trunk/   <- contains ancient version, not actual trunk
>> tags/1.0.0/moduleA <- contains tagged version of moduleA
>> tags/1.0.0/moduleB <- contains tagged version of moduleB
>> tags/1.0.0/moduleC <- contains tagged version of moduleC
>> tags/1.0.0/moduleD <- contains tagged version of moduleD
>> tags/1.0.1/moduleA
>> tags/1.0.1/moduleB
>> ...
>>
>> So I'd like to set up a git repo that tracks this SVN repository, and 
>> allows me to see:
>> moduleA/
>> moduleB/
>> moduleC/
>> moduleD/
>> ... in my checkout, whether I'm on trunk or a tag.
>
> So you want one git repo, reflecting the modules simply by different 
> subdirs? I'm afraid that raises similar problems like those I asked 
> about in my (yet unanswered) post
>
> http://permalink.gmane.org/gmane.comp.version-control.git/85861

I saw your post, and flagged it to see if anybody answered it, yes it 
does seem similar.
>
>> I've started with "git svn clone http://path/to/svn -T moduleA/trunk 
>> -t tags -b branches", and it's been sucking down branches for a 
>> couple days 
>
> This should give you all "modules" (as subsdirs) for all branches and 
> tags already. svn branch "branchname" becomes git remote branch 
> "branchname", svn tag "tagname" becomes git remote branch "tags/tagname".
> Note that your new git branch trunk will contain the contents of 
> "moduleA" only.

That's exactly what happened.
>
>> now, still not done. Can I set up moduleB/moduleC/moduleD as 
>> additional remotes in this same repository, and end up with the 
>> desired result? Was thinking I would add additional svn sections to 
>> .git/config, and then git svn fetch -- will this work, or is there a 
>> better way?
>
> If I understand your layout (and "desires") correctly then trunk will 
> be your only problem: you want to map "module?/trunk" to subdir 
> "module?" of branch "trunk". This is more or less the problem I'm 
> facing. Regular expressions (other than the ones for branches and 
> tags) in git svn config would solve this.
>

I found in the docs a section on subtrees, and with a bit of trickery, I 
think I'm getting what I want, though it's not simple to update. What 
I've done so far is change .git/config to:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[svn-remote "svn"]
    url = http://svn.dojotoolkit.org/src
    branches = branches/*:refs/remotes/*
    tags = tags/*:refs/remotes/tags/*
[svn-remote "dojo"]
    url = http://svn.dojotoolkit.org/src
    fetch = dojo/trunk:refs/remotes/dojo-trunk
[svn-remote "dijit"]
    url = http://svn.dojotoolkit.org/src
    fetch = dijit/trunk:refs/remotes/dijit-trunk
[svn-remote "dojox"]
    url = http://svn.dojotoolkit.org/src
    fetch = dojox/trunk:refs/remotes/dojox-trunk
[svn-remote "util"]
    url = http://svn.dojotoolkit.org/src
    fetch = util/trunk:refs/remotes/util-trunk


... dojo, dijit, dojox, and util correspond to moduleA-D in my previous 
example. So I have "svn" for the branches, and separate SVN sections for 
the trunk of each module. Then I used git svn fetch 
[dojo|dijit|dojox|util] to suck down those as individual branches.

Now the tricky part: I checked out a new "work" branch, and deleted 
everything in the working copy. Then, 4 steps out of the howto, adjusted 
to pull the particular branch from the current repository (instead of an 
outside one):

git remote add -t dojo -f dojo ./
git merge -s ours --no-commit dojo-trunk
git read-tree --prefix=dojo/ -u dojo-trunk
git commit -m "merge dojo into subdirectory"

... repeat for the other modules, and I ended up with my "work" branch 
containing the full trunk for all 4 modules.

Now for tracking the original project. According to the howto, you use 
this syntax to pull down changes:

 git pull -s subtree Bproject master
... when I try git pull -s subtree ./ dojo, I get "Already up to date", 
even though I know there are new changes. Still need to mess around with 
git svn rebase, I guess, to get the updates working correctly.

Cheers,

-- 
John Locke
"Open Source Solutions for Small Business Problems"
published by Charles River Media, June 2004
http://www.freelock.com

  reply	other threads:[~2008-06-26 18:30 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-24 18:32 git svn clone a non-standard repository John Locke
2008-06-25 15:25 ` Michael J Gruber
2008-06-26 18:29   ` John Locke [this message]
2008-06-26 18:39     ` John Locke
2008-06-27  1:06       ` John Locke

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4863E01E.9050108@freelock.com \
    --to=mail@freelock.com \
    --cc=git@vger.kernel.org \
    --cc=michaeljgruber+gmane@fastmail.fm \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.