Git development
 help / color / mirror / Atom feed
From: Bob Cotton <bob.cotton@rallydev.com>
To: "Jean-Baptiste Quenot" <jbq@caraldi.com>
Cc: ivanisev@sezampro.com, git@vger.kernel.org
Subject: Re: Git and git-svn question.
Date: Fri, 28 Mar 2008 08:38:25 -0600	[thread overview]
Message-ID: <m24paqsyla.fsf@rallydevelopment.com> (raw)
In-Reply-To: <ae63f8b50803280427m55f6b957r12745c8e4178588b@mail.gmail.com> (Jean-Baptiste Quenot's message of "Fri\, 28 Mar 2008 12\:27\:59 +0100")

"Jean-Baptiste Quenot" <jbq@caraldi.com> writes:

> Hi Bosko,
>
> 2008/3/28, Bosko Ivanisevic <ivanisev@sezampro.com>:
>> My company uses SVN and I have to work on the code from two offices.
>>  Since SVN is far away from git in branching I've decided to set up git
>>  repository as a mirror of company's SVN repo, which I would use as
>>  intermediate repository for my code:
>>
>>  git svn clone -t tags -b branches -T trunk
>>  svn+ssh://company_server/path_to_svn_repo --prefix=company/
>
> -t tags -b branches -T trunk == -s
>
>>  Since I just started to use git I wonder if anyone can give me any hint
>>  what is the best way to accomplish following tasks with git:
>>
>>  - In office 1 and office 2 I clone git repository that is a mirror of SVN:
>>    git clone ssh://company_server/path_to_git_repo
>
> You can't do that as SVN information is not cloned.  You have to call
> git-svn clone on every working copy.

git-svn clone takes on the order of 6 hours for us. I've had some luck
with "pre-clone/post-clone" steps that:

pre-clone (which is run after 'git svn clone')

1. create local branches for all 'remote' (svn) branches. This is so
   'git clone' will create 'remote branches'. These are just
   placeholders for the post-clone step:

   git branch -r | grep -v tags | sed -rne 's, *([^@]+)$,\1,p' | while read branch; do
     echo "git branch $branch $branch"
   done | sh

2. create real git tags from all svn tags (we never branch from tags):

  git branch -r | sed -rne 's, *tags/([^@]+)$,\1,p' | while read tag; do
    echo "git tag $tag 'tags/${tag}^'; git branch -r -d tags/$tag"
  done | sh

3. Now, with this repo, we create a "read-only" bare repo:

   git clone --bare repo /somewhere/public/repo.git

4. cleanup the heads created from #1

   git show-ref --heads | cut -d' ' -f 2 | grep -v master | while read branch; do
     echo "git branch -D `basename $branch`"; 
   done  | sh

5. Now everyone git-clones from this repo, and runs 'post-clone' (below):

   git clone git://somewhere/public/repo.git

We run 1-4 in a cron nightly.

After step 5, we 'post-clone':

1. put all 'origin/remote' branches (created in pre-clone #1) back to
   refs/remote/<branch>

   for i in `git-branch -r | egrep -v 'HEAD|master'`; do
     echo "git update-ref refs/remotes/`basename $i` $i"
     echo "git branch -D -r $i"
   done | sh

2. delete origin/HEAD and origin/master

   git update-ref --no-deref refs/remotes/origin/HEAD origin/master
   git branch -D -r origin/HEAD
   git branch -D -r origin/master

3. delete the origin repo from the config:

   git config --remove-section remote.origin
   git config --remove-section branch.master

4. re-init git-svn

    git svn init -s <your svn repo>

5. rebase
 
    git svn rebase

Now everyone has is working from the same git repo, and they have all
been reconfigured so that svn is the 'origin'.

- Bob

      parent reply	other threads:[~2008-03-28 14:56 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-28  7:53 Git and git-svn question Bosko Ivanisevic
2008-03-28 11:27 ` Jean-Baptiste Quenot
2008-03-28 13:07   ` Bosko Ivanisevic
2008-03-28 14:38   ` Bob Cotton [this message]

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=m24paqsyla.fsf@rallydevelopment.com \
    --to=bob.cotton@rallydev.com \
    --cc=git@vger.kernel.org \
    --cc=ivanisev@sezampro.com \
    --cc=jbq@caraldi.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox