Merging repositories and their histories
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.
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]
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:CQuoted 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 CThat's it.
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:CQuoted 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 CThat's it.
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.
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 את.ψο´
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?
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
את.ψο´