git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Ryan Anderson <ryan@michonline.com>
To: Petr Baudis <pasky@suse.cz>
Cc: Mathias Waack <Mathias.Waack@rantzau.de>, git@vger.kernel.org
Subject: Re: Joining Repositories
Date: Wed, 18 Jan 2006 09:09:17 -0500	[thread overview]
Message-ID: <20060118140917.GA15438@mythryan2.michonline.com> (raw)
In-Reply-To: <20060118125158.GN28365@pasky.or.cz>

On Wed, Jan 18, 2006 at 01:51:58PM +0100, Petr Baudis wrote:
>   Hello,
> 
> Dear diary, on Wed, Jan 18, 2006 at 01:25:59PM CET, I got a letter
> where Mathias Waack <Mathias.Waack@rantzau.de> said that...
> > we're using git with cogito as a frontend. For some reasons I forgot we have 
> > some repositories which belong to the same project. To simplify the whole 
> > thing I would like to join these repositories. It mainly means to move some 
> > directories. So lets say I have: 
> > 
> > 	/r1/.git
> > 	/r2/.git
> > 
> > and what I would like to have is
> > 
> > 	/r/.git
> > 	   r1
> >            r2
> > 
> > Of course the history should remain (otherwise it would be to easy). 
> > 
> > How should I do this?
> 
>   The crucial question is what the joined repository's directory
> structure should be. If from r1/a, r2/b you want r/a, r/b then it's
> easy:
> 
> 	cd r1
> 	cg-branch-add r2 ../r2/.git
> 	cg-fetch r2
> 	cg-merge -j r2
> 
>   But if you want r1/a, r2/b to turn to r/r1/a, r/r2/b, you will have
> to rewrite the history of each (and then do the above). One rough
> and untested sketch...

... Why would that be the optimal method?

Assuming both repositories are clean, no extraneous files, and without
testing, of course:

In r1:
	mkdir r1
	# move everything into the subdirectory called r1.
	git mv $(ls -a | grep -v -e ^.git$ -e ^r1$) r1/
	git commit -a "Restructure directory"

In r2:
	mkdir r2
	# move all files into r2/
	git mv $(ls -a | grep -v -e ^.git$ -e ^r2$) r2/
	git commit -a "Restructure directory"

	git fetch ../r1/
	GIT_INDEX_FILE=.git/tmp-index git-read-tree FETCH_HEAD
	GIT_INDEX_FILE=.git/tmp-index git-checkout-cache -a -u
	git-update-cache --add -- $(GIT_INDEX_FILE=.git/tmp-index git-ls-files)
	cp .git/FETCH_HEAD .git/MERGE_HEAD
	git commit

No history rewritten, merging with the old repositories should, at least
theoretically, work, etc.

(This is just a restatement of Linus's "Coolest merge ever" / union
merge)

-- 

Ryan Anderson
  sometimes Pug Majere

  parent reply	other threads:[~2006-01-18 14:09 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-01-18 12:25 Joining Repositories Mathias Waack
2006-01-18 12:51 ` Petr Baudis
2006-01-18 12:58   ` Petr Baudis
2006-01-18 14:01     ` Mathias Waack
2006-01-18 14:14       ` Petr Baudis
2006-01-19 11:36         ` Mathias Waack
2006-01-19 18:24         ` Junio C Hamano
2006-01-18 14:14       ` Andreas Ericsson
2006-01-18 14:09   ` Ryan Anderson [this message]
2006-01-18 14:21     ` Petr Baudis
2006-01-18 14:39       ` Ryan Anderson
2006-01-18 16:23     ` Linus Torvalds
2006-01-18 17:05       ` Petr Baudis
2006-01-18 17:33         ` Junio C Hamano
2006-01-18 18:03         ` Linus Torvalds
2006-01-18 17:30       ` Junio C Hamano
2006-01-18 18:22         ` Linus Torvalds
2006-01-18 19:09           ` Junio C Hamano
2006-01-18 20:09             ` Linus Torvalds
2006-01-18 22:47               ` Linus Torvalds
2006-01-18 23:15                 ` Linus Torvalds
2006-01-19  2:12         ` Junio C Hamano
2006-01-19  9:03           ` Petr Baudis
2006-01-18 18:55       ` Ryan Anderson
2006-01-18 16:38 ` H. Peter Anvin

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=20060118140917.GA15438@mythryan2.michonline.com \
    --to=ryan@michonline.com \
    --cc=Mathias.Waack@rantzau.de \
    --cc=git@vger.kernel.org \
    --cc=pasky@suse.cz \
    /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;
as well as URLs for NNTP newsgroup(s).