From: Jakub Narebski <jnareb@gmail.com>
To: Christian Couder <chriscool@tuxfamily.org>
Cc: bill lam <cbill.lam@gmail.com>,
Johannes Sixt <j.sixt@viscovery.net>, git <git@vger.kernel.org>,
Christian Couder <christian.couder@gmail.com>
Subject: Re: combine git repo historically
Date: Sun, 11 Oct 2009 01:48:17 -0700 (PDT) [thread overview]
Message-ID: <m31vlagvtw.fsf@localhost.localdomain> (raw)
In-Reply-To: <200910110436.52653.chriscool@tuxfamily.org>
Christian Couder <chriscool@tuxfamily.org> writes:
> On Saturday 10 October 2009, bill lam wrote:
> > Christian Couder also mentioned the git-replace command, how to stitch
> > with it?
>
> First you need to create a commit that will replace commit N, let's call it
> N' and after that you can use "git replace N N'". So the complex part is to
> create N'.
>
> You want N' to have the same content as N but to have M as parent. So you
> could do something like the following:
>
> (We suppose that commits A to M are in branch1 and that you are in the root
> directory of your repo2 working directory.)
>
> $ git checkout -b repo1-branch1 remote/repo1/branch1
> $ git checkout N -- .
> $ export GIT_AUTHOR_NAME=<author name of commit N>
> $ export GIT_AUTHOR_EMAIL=<author email of commit N>
> $ export GIT_AUTHOR_DATE=<date of commit N>
> $ git commit -a
>
> And then use the commit message from commit N, and maybe also say in the
> commit message that it is replacement commit made to link repo1 with repo2
> or something like that.
I think simpler solution would be to use plumbing for that. First
save commit to be replaced in a (text) file:
$ git cat-file commit N > COMMIT_N
If you want to edit only commit message and perhaps parentage (like I
think in this case), you need to simply edit COMMIT_N file, and modify
(or add) 'parent' header(s), which is between 'tree' and 'author'
header.
Then put modified commit in repository object database
$ git hash-object -t commit -w COMMIT_N
> At this step you have created N' and you should make sure that it is exactly
> what you want. It should point to the same tree as N, it should have M as
> parent, ...
>
> If everything is ok then you can use:
>
> $ git replace N HEAD
And then do
$ git replace N NEW_N
where N is _SHA-1_ of original comit ("git rev-parse --verify N^0"),
and NEW_N is SHA-1 of replacement commit, as written by git-hash-object.
> And you should be done.
But I haven't tested this. YMMV.
See also my answer here:
http://stackoverflow.com/questions/1220557/how-do-i-prepend-history-to-a-git-repo/1547490#1547490
--
Jakub Narebski
Poland
ShadeHawk on #git
next prev parent reply other threads:[~2009-10-11 8:50 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-09 1:22 combine git repo historically bill lam
2009-10-09 6:02 ` Johannes Sixt
2009-10-09 7:40 ` Christian Couder
2009-10-10 14:03 ` bill lam
2009-10-11 2:36 ` Christian Couder
2009-10-11 4:06 ` bill lam
2009-10-11 10:11 ` Christian Couder
2009-10-11 8:48 ` Jakub Narebski [this message]
2009-10-11 13:07 ` Johannes Sixt
2009-10-11 13:43 ` Christian Couder
2009-10-11 14:29 ` Jakub Narebski
2009-10-11 9:34 ` Andreas Schwab
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=m31vlagvtw.fsf@localhost.localdomain \
--to=jnareb@gmail.com \
--cc=cbill.lam@gmail.com \
--cc=chriscool@tuxfamily.org \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=j.sixt@viscovery.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.