On Tuesday 02 December 2008, Michael J Gruber <git@xxxxxxxxxxxxxxxxxxxx> wrote about 'Re: Grafting mis-aligned trees.': >Boyd Stephen Smith Jr. venit, vidit, dixit 29.11.2008 00:01: >> On Tuesday 2008 November 18 03:24, Michael J Gruber wrote: >>> Boyd Stephen Smith Jr. venit, vidit, dixit 17.11.2008 23:45: >>>> Trees look something like this right now. >>>> >>>> <some history> -> FT >>>> >>>> TI -> <non-linear history> -> A -> <non-linear history> -> C >>>> \ \ \ >>>> -> PI ------------------------> B ------------------------> D >>>> >>>> I'd like to have it look something like: >>>> >>>> <some history> -> FT -> <non-linear history> -> A' -> <non-linear >>>> history> -> C' \ \ >>>> \ -> PI' ----------------------> B' -----------------------> D' >>>> >>>> A', B', C', and D' are different commits, but the diff (and history) >>>> between FT and A' is the same as the diff (and history) between TI >>>> and A. >>> >>> So, your base directory for TI and FT is different, right? I.e.: In >>> the TI repo, your project sits at the root, whereas in the FT repo it >>> sits in project/web? >> >> Yes. >> >>> Has FT advanced since you took the initial subdir >>> snapshot for TI? >> >> No. > >OK, here's a possibly primitive solution, but it works with my little >toy model of your layout: That sounds like it will work fine. Thank you very much. It does feel a bit "hacky", I was hoping git would have better support this, through the subtree merge or something else. It seems like something that might happen to others, perhaps as a side-effect of a failed attempt at using submodules. I can't help thinking that rebase -ip might have helped. I wasn't aware of -p when I was initially working on this problem. (It doesn't help that I generally use Debian stable, and git 1.4 did not have -p.) >- filter-branch your TI branches so that they are in the proper subdir >(you did that already) If I need to "undo" this, it's really easy. >- take a snapshot (say ftstuff.tar) of everything in FT's head (assuming >this is where TI branched off, or else take that point) *but exclude >project/web* > >- using filter-branch again, rewrite your TI branches to contain those >missing FT files: >git filter-branch --tree-filter 'tar -xf /tmp/ftstuff.tar && git add .' >-f -- ti/master ti/whatever I probably don't need the -f. If there are files that should be ignored (and thus shouldn't be in the repo), I'll filter-branch to cut them out of the history at some point. Now is as good a time as any. >Now your TI branches produce the same diffs as before, but are based on >the full tree. You can happily graft FT's head onto TI's root as a > parent. In fact those two should produce no diff in between them, so you > might as well get rid of one of them. Makes sense. >[cleaning out refs/original and repack -adf might be in order afterwards] I generally do these after a successful filter-branch. >The tree-filter part feels hacky but does the job (probably with -f). I >don't think a subtree merge can do what you want. What *exactly* is the subtree merge. The documentation I've read sounds like this case, sort of, but it's rather unclear to me. -- Boyd Stephen Smith Jr. ,= ,-_-. =. bss03@xxxxxxxxxxxxxx ((_/)o o(\_)) ICQ: 514984 YM/AIM: DaTwinkDaddy `-'(. .)`-' http://iguanasuicide.org/ \_/
Attachment:
signature.asc
Description: This is a digitally signed message part.