All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Eager <eager@eagerm.com>
To: git@vger.kernel.org
Subject: Best practices for updating old repos
Date: Thu, 15 Jun 2017 17:52:28 -0700	[thread overview]
Message-ID: <59432BCC.2040901@eagerm.com> (raw)

Hi All --

I'm working with code that is based on a five year old repository.
There are 130 local commits since the repo was forked.  Naturally,
the upstream project has moved on significantly.

I'm wondering about best approaches to updating the repo to the
current upstream version.  Here are the approaches I've considered:

- Rebase from upstream.  Likely almost every patch will fail with
   multiple merge conflicts.

- Merge local branch into upstream.  Likely many merge failures, but
   fewer than with rebase.

- Apply individual patches from the old repo to the upstream repo.
   Fix merge conflicts, rebuild, fix build failures.  There may be
   some duplication and additional merge problems created, where a
   later patch from the old repo fixes the same conflict or build
   failure.

I've tried each of these approaches on various projects.  Each has
problems. After resolving merge issues there are build failures which
need to be resolved and additional patches created.  The result is
that the patch history is a bit chaotic, where there are later patches
which fix problems with early patches.  I've tried to sort the fix
patches to follow the patch they correct, so that the fixes were
together and I could merge them, but that can be difficult.

I've used Stacked Git a little, but don't know if it will make
any of this easier.

On some projects, I've reimplemented changes in the upstream repo,
abandoning the patch history from the old repo:

- Create diff of old repo and upstream.  Apply only the changes
   to add new functionality, which are in the patches to the
   old repo.   Fix problems caused by API changes, renamed files, etc.

- Re-implement the changes on the upstream repo.  Some of the old
   code would be re-used, but modified to fit in the current upstream.
   Some new code would be written.

One other variant of the rebase approach I've thought of is to do
this incrementally, rebasing the old repo against an upstream commit
a short time after the old repo was forked, fixing any conflicts,
rebuilding and fixing build failures.  Then repeat, with a bit
newer commit.  Then repeat, until I get to the top.  This sounds
tedious, but some of it can be automated.  It also might result in
my making the changes compatible with upstream code which was later
abandoned or significantly changed.

Anyone have a different approach that I should consider?  Or maybe
offer advice on how to make one of these approaches work better?
What is best practice to update an old repo?

-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077

             reply	other threads:[~2017-06-16  1:00 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-16  0:52 Michael Eager [this message]
2017-06-16  4:22 ` Best practices for updating old repos Stefan Beller
2017-06-16  6:32   ` Michael Eager
     [not found] ` <CAGUfqurYdFJDT4+XzyPvo3sxeT=zjXqZGCPpDbUFwjqG1B3pBw@mail.gmail.com>
2017-06-16  6:24   ` Michael Eager
2017-06-16 10:16   ` Fwd: " Michael O'Cleirigh

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=59432BCC.2040901@eagerm.com \
    --to=eager@eagerm.com \
    --cc=git@vger.kernel.org \
    /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.