threads / discuss / 15072

Merging repositories and their histories

Subject: Merging repositories and their histories

## tl;dr

8 messages between Aug 18, 2008 and Aug 22, 2008.

replies: 7people: 3as markdown or json

Peter Waller· Aug 18, 2008, 16:46 UTC · lore

I have three repositories, A, B and C. I wish to bring them together to only one repository (.), where they are in a directory called ./Archive, so.. ./Archive/{A,B,C}. Then I plan at a later date to move files arbitrarily from ./Archive/{A/B/C}/Something and into ./Something{A/B/C}. (A lame example, but illustrates what I want to do).

I would like ./SomethingA (etc) to have their complete histories from the old repository. I thought I would do this with the subtree mechanism described at http://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html, but I have had little luck getting it to work as I desired.

Firstly, I create a new repository with git init, then I "remote add A", "merge" and "readtree". This immediately leads to two copies of A's files, in ./Archive/A/Files and ./Files. The files in Archive/A do not have any history.

Then if I do this with B, the files do not appear in ./, but again they do not have their history. I have tried using git log --follow -M, but this does not seem to help. I have tried numerous other ways of doing this, but none seem to work.

I thought I would get around my problems doing the merge, then moving the files - this works for A, but when I move on to B, the files are not in ./, so I can't move them. If I read-tree some files, git status/commit shows them as 'new files' and does not seem to recognize them as old files with a long history.

Any help would be appreciated on this problem.
Thanks in advance,
- Peter
-- 
View this message in context: http://www.nabble.com/Merging-repositories-and-their-histories-tp19035412p19035412.html
Sent from the git mailing list archive at Nabble.com.
Alex Riesen· Aug 18, 2008, 17:35 UTC · re: Peter Waller · lore

Re: Merging repositories and their histories

Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:
Show 6 quoted lines
> 
> I have three repositories, A, B and C. I wish to bring them together to only
> one repository (.), where they are in a directory called ./Archive, so..
> ./Archive/{A,B,C}. Then I plan at a later date to move files arbitrarily
> from ./Archive/{A/B/C}/Something and into ./Something{A/B/C}. (A lame
> example, but illustrates what I want to do).

If this transition is meant to be persistent (IOW, the A, B and C stop existing as repos on their own) you can rewrite their histories to be in the directories (with git filter-branch) and just merge them in one. Then the histories will look like as if they have never grown separately.

Peter Waller· Aug 18, 2008, 18:16 UTC · re: Alex Riesen · lore

Re: Merging repositories and their histories

I don't quite understand what you are suggesting I do.
I have looked over the filter-branch manpage.

What would I first do? Copy all three repositories to ./Archive/{A,B,C}? Then rewrite their histories?

- Peter
2008/8/18 Alex Riesen <raa.lkml@gmail.com>
Show 15 quoted lines
>
> Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:
> >
> > I have three repositories, A, B and C. I wish to bring them together to only
> > one repository (.), where they are in a directory called ./Archive, so..
> > ./Archive/{A,B,C}. Then I plan at a later date to move files arbitrarily
> > from ./Archive/{A/B/C}/Something and into ./Something{A/B/C}. (A lame
> > example, but illustrates what I want to do).
>
> If this transition is meant to be persistent (IOW, the A, B and C stop
> existing as repos on their own) you can rewrite their histories to be
> in the directories (with git filter-branch) and just merge them in
> one. Then the histories will look like as if they have never grown
> separately.
>
Marcus Griep· Aug 21, 2008, 21:48 UTC · re: Peter Waller · lore

Re: Merging repositories and their histories

Peter Waller wrote:
Show 5 quoted lines
> I have three repositories, A, B and C. I wish to bring them together to only
> one repository (.), where they are in a directory called ./Archive, so..
> ./Archive/{A,B,C}. Then I plan at a later date to move files arbitrarily
> from ./Archive/{A/B/C}/Something and into ./Something{A/B/C}. (A lame
> example, but illustrates what I want to do).
Peter Waller also wrote:
Show 9 quoted lines
> Thanks, it worked.
> 
> 2008/8/18 Alex Riesen <raa.lkml@gmail.com>:
> > > Peter Waller, Mon, Aug 18, 2008 20:15:52 +0200:
> >> >> 2008/8/18 Alex Riesen <raa.lkml@gmail.com>
> >> >>
> >>> >> > Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:
> >>>> >> > >
> >>>> >> > > (The same thing as above)
Did it actually not work?
-- 
Marcus Griep
GPG Key ID: 0x5E968152
——
http://www.boohaunt.net
את.ψο´
Peter Waller· Aug 21, 2008, 21:53 UTC · re: Marcus Griep · lore

Re: Merging repositories and their histories

Nabble kept telling me that my post was not submitted, which I found very confusing, so I ended up trying to resubmit the post. Sorry for the spam. This is now sorted.

Cheers for the keen-ness to help! :-)
- Pete
2008/8/21 Marcus Griep <neoeinstein@gmail.com>
Show 28 quoted lines
>
> Peter Waller wrote:
> > I have three repositories, A, B and C. I wish to bring them together to only
> > one repository (.), where they are in a directory called ./Archive, so..
> > ./Archive/{A,B,C}. Then I plan at a later date to move files arbitrarily
> > from ./Archive/{A/B/C}/Something and into ./Something{A/B/C}. (A lame
> > example, but illustrates what I want to do).
>
> Peter Waller also wrote:
> > Thanks, it worked.
> >
> > 2008/8/18 Alex Riesen <raa.lkml@gmail.com>:
> > > > Peter Waller, Mon, Aug 18, 2008 20:15:52 +0200:
> > >> >> 2008/8/18 Alex Riesen <raa.lkml@gmail.com>
> > >> >>
> > >>> >> > Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:
> > >>>> >> > >
> > >>>> >> > > (The same thing as above)
>
> Did it actually not work?
>
> --
> Marcus Griep
> GPG Key ID: 0x5E968152
> ——
> http://www.boohaunt.net
> את.ψο´
>
Alex Riesen· Aug 22, 2008, 12:19 UTC · re: Marcus Griep · lore

Re: Merging repositories and their histories

2008/8/21 Marcus Griep <neoeinstein@gmail.com>:
Show 10 quoted lines
>> 2008/8/18 Alex Riesen <raa.lkml@gmail.com>:
>> > > Peter Waller, Mon, Aug 18, 2008 20:15:52 +0200:
>> >> >> 2008/8/18 Alex Riesen <raa.lkml@gmail.com>
>> >> >>
>> >>> >> > Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:
>> >>>> >> > >
>> >>>> >> > > (The same thing as above)
>
> Did it actually not work?
>
Why not?
Alex Riesen· Aug 18, 2008, 19:40 UTC · lore

Re: Merging repositories and their histories

Peter Waller, Mon, Aug 18, 2008 20:15:52 +0200:
Show 22 quoted lines
> 2008/8/18 Alex Riesen <raa.lkml@gmail.com>
> 
> > Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:
> > >
> > > I have three repositories, A, B and C. I wish to bring them
> > > together to only one repository (.), where they are in a
> > > directory called ./Archive, so..  ./Archive/{A,B,C}. Then I plan
> > > at a later date to move files arbitrarily from
> > > ./Archive/{A/B/C}/Something and into ./Something{A/B/C}. (A lame
> > > example, but illustrates what I want to do).
> >
> > If this transition is meant to be persistent (IOW, the A, B and C stop
> > existing as repos on their own) you can rewrite their histories to be
> > in the directories (with git filter-branch) and just merge them in
> > one. Then the histories will look like as if they have never grown
> > separately.
> >
> I don't quite understand what you are suggesting I do.
> 
> I have looked over the filter-branch manpage.
> 
> What would I first do? Copy all three repositories to ./Archive/{A,B,C}?
Fetch, actually.
    $ mkdir combined && cd combined
    $ git init
    $ git fetch ../A master:A
    $ git fetch ../B master:B
    $ git fetch ../C master:C
> Then rewrite their histories?

There is an example at the end of git-filter-branch manpage. Search for "To move the whole tree into a subdirectory". Just use A, B and C instead of HEAD as last argument.

Then checkout one of the new, the rewritten, branches, and merge the two others into it:

    $ git checkout A
    $ git merge B
    $ git merge C
That's it.
Peter Waller· Aug 18, 2008, 21:25 UTC · re: Alex Riesen · lore

Re: Merging repositories and their histories

Thanks, it worked.
2008/8/18 Alex Riesen <raa.lkml@gmail.com>:
Show 47 quoted lines
> Peter Waller, Mon, Aug 18, 2008 20:15:52 +0200:
>> 2008/8/18 Alex Riesen <raa.lkml@gmail.com>
>>
>> > Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:
>> > >
>> > > I have three repositories, A, B and C. I wish to bring them
>> > > together to only one repository (.), where they are in a
>> > > directory called ./Archive, so..  ./Archive/{A,B,C}. Then I plan
>> > > at a later date to move files arbitrarily from
>> > > ./Archive/{A/B/C}/Something and into ./Something{A/B/C}. (A lame
>> > > example, but illustrates what I want to do).
>> >
>> > If this transition is meant to be persistent (IOW, the A, B and C stop
>> > existing as repos on their own) you can rewrite their histories to be
>> > in the directories (with git filter-branch) and just merge them in
>> > one. Then the histories will look like as if they have never grown
>> > separately.
>> >
>> I don't quite understand what you are suggesting I do.
>>
>> I have looked over the filter-branch manpage.
>>
>> What would I first do? Copy all three repositories to ./Archive/{A,B,C}?
>
> Fetch, actually.
>
>    $ mkdir combined && cd combined
>    $ git init
>    $ git fetch ../A master:A
>    $ git fetch ../B master:B
>    $ git fetch ../C master:C
>
>> Then rewrite their histories?
>
> There is an example at the end of git-filter-branch manpage. Search
> for "To move the whole tree into a subdirectory". Just use A, B and C
> instead of HEAD as last argument.
>
> Then checkout one of the new, the rewritten, branches, and merge the
> two others into it:
>
>    $ git checkout A
>    $ git merge B
>    $ git merge C
>
> That's it.
>

← back to recent threads