# Grafting Alternate History

3 messages from 2012-08-31 to 2012-09-04. Participants: dag@cray.com, Andreas Schwab.
Thread: https://gitlist.dev/t/31401

## dag@cray.com, 2012-08-31 23:39

Subject: Grafting Alternate History
Message-ID: <nng7gse7hrl.fsf@transit.us.cray.com>
URL: https://gitlist.dev/e/nng7gse7hrl.fsf%40transit.us.cray.com

```
I have an unfortunate situation where I have two subversion repositories
for the same project, one a public version and one a private version.
Because they are mirrors of svn repositories, they have very different
histories as far as git is concerned.  This is not all that uncommon but
of course I would like to manage things in git.

git-svn is great for interacting with one svn repository.  The public
svn repository has a fully-supported git mirror.  The private repository
also has a fully-supported git mirror.  But I need to check in changes
to the private repository via git-svn.  I eventually need to check in
changes to the public repository as well but that is orders of magnitude
less frequent.  A manual diff+patch+git-svn is acceptable for now.

I am wondering if it's possible to graft the history of one of the git
mirrors onto an empty branch of the other and share changes between
them.  I need to take updates from the public repository and apply them
to the private repository.  This is a frequent operation.  I have been
essentially using manual diff+patch but that is highly error-prone and
annoying.

For example, let's say we take a local copy of the private repository.
I would like to somehow create an empty branch in that local copy and
then populate it with the history of the public repository.  I would
like to be able to specify a git diff-like command on the public graft
branch to get some changes over a range of commits and apply those
changes to one of the private branches (say master).  If I could use a
git-merge-like or git-rebase-like command, so much the better.  I would
like to do the same in reverse but as I said that is a much less common
operation.

Has anyone done anything like this before?  Is it even theoretically
possible to manage disjoint histories like this?

Thanks for your help!

                            -Dave

```

## Andreas Schwab, 2012-09-01 06:48

Subject: Re: Grafting Alternate History
Message-ID: <m2harick7z.fsf@igel.home>
URL: https://gitlist.dev/e/m2harick7z.fsf%40igel.home
In-Reply-To: <nng7gse7hrl.fsf@transit.us.cray.com>

```
<dag@cray.com> writes:

> For example, let's say we take a local copy of the private repository.
> I would like to somehow create an empty branch in that local copy and
> then populate it with the history of the public repository.  I would
> like to be able to specify a git diff-like command on the public graft
> branch to get some changes over a range of commits and apply those
> changes to one of the private branches (say master).

You can set up (the git mirror of) the public repository as a remote in
the private repository and git cherry-pick the commits you want to copy
over.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

```

## dag@cray.com, 2012-09-04 22:56

Subject: Re: Grafting Alternate History
Message-ID: <nngmx155rdr.fsf@transit.us.cray.com>
URL: https://gitlist.dev/e/nngmx155rdr.fsf%40transit.us.cray.com
In-Reply-To: <m2harick7z.fsf@igel.home>

```
Andreas Schwab <schwab@linux-m68k.org> writes:

> You can set up (the git mirror of) the public repository as a remote in
> the private repository and git cherry-pick the commits you want to copy
> over.

Now why didn't I think of that!?  :)

Thanks for helping an old bumbler along.  :)

                         -Dave

```
