Skip to contentSkip to conversation

Merging repositories and their histories

DISCUSSION Peter Waller 3 participants 8 messages Jun 15, 2016 1 message not in the archive

lore
Share & tools
lore
#0 lore raw

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

Signature · 2 lines
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.
#1 lore raw

Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:

Quoted 6 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.

A message that is not in the archive (sent off-list or not yet received): [email protected]

#3 lore raw

Peter Waller, Mon, Aug 18, 2008 20:15:52 +0200:

Quoted 17 lines

2008/8/18 Alex Riesen <[email protected]>

Quoted 9 lines

Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:

Quoted 7 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).

Quoted 6 lines

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.

Quoted 5 lines

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
Quoted 1 line

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.

#4 lore raw

Thanks, it worked.

2008/8/18 Alex Riesen <[email protected]>:

Quoted 47 lines

Peter Waller, Mon, Aug 18, 2008 20:15:52 +0200:

Quoted 17 lines

2008/8/18 Alex Riesen <[email protected]>

Quoted 9 lines

Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:

Quoted 7 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).

Quoted 6 lines

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.

Quoted 5 lines

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
Quoted 1 line

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.

#5 lore raw
In reply to Alex Riesen

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 <[email protected]>

Quoted 15 lines

Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:

Quoted 6 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.

#6 lore raw
In reply to Peter Waller
Quoted 5 lines · Peter Waller

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).

Quoted 9 lines · Peter Waller also

Thanks, it worked.

2008/8/18 Alex Riesen <[email protected]>:

Quoted 6 lines
Quoted 6 lines

Peter Waller, Mon, Aug 18, 2008 20:15:52 +0200:

Quoted 5 lines
Quoted 5 lines

2008/8/18 Alex Riesen <[email protected]>

Quoted 3 lines
Quoted 3 lines

Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:

Quoted 2 lines
Quoted 2 lines

(The same thing as above)

Did it actually not work?

Signature · 5 lines
Marcus Griep
GPG Key ID: 0x5E968152
——
http://www.boohaunt.net
את.ψο´
#7 lore raw

2008/8/21 Marcus Griep <[email protected]>:

Quoted 10 lines
Quoted 7 lines

2008/8/18 Alex Riesen <[email protected]>:

Quoted 6 lines
Quoted 6 lines

Peter Waller, Mon, Aug 18, 2008 20:15:52 +0200:

Quoted 5 lines
Quoted 5 lines

2008/8/18 Alex Riesen <[email protected]>

Quoted 3 lines
Quoted 3 lines

Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:

Quoted 2 lines
Quoted 2 lines

(The same thing as above)

Did it actually not work?

Why not?

#8 lore raw
In reply to Marcus Griep

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 <[email protected]>

Quoted 28 lines
Quoted 5 lines · Peter Waller

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).

Quoted 9 lines · Peter Waller also

Thanks, it worked.

2008/8/18 Alex Riesen <[email protected]>:

Quoted 6 lines
Quoted 6 lines

Peter Waller, Mon, Aug 18, 2008 20:15:52 +0200:

Quoted 5 lines
Quoted 5 lines

2008/8/18 Alex Riesen <[email protected]>

Quoted 3 lines
Quoted 3 lines

Peter Waller, Mon, Aug 18, 2008 18:46:14 +0200:

Quoted 2 lines
Quoted 2 lines

(The same thing as above)

Did it actually not work?

--
Marcus Griep
GPG Key ID: 0x5E968152
——
http://www.boohaunt.net
את.ψο´