emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Switching from old git tree


From: Nicolas Richard
Subject: Re: Switching from old git tree
Date: Fri, 14 Nov 2014 14:29:33 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.4.51 (gnu/linux)

address@hidden (Peder O. Klingenberg) writes:

> I have been using the old git-mirror for a while.  In there, I have a
> branch with some local modifications.
>
> I understand that I need to check out a fresh tree now after the
> conversion?  What is the smoothest way of integrating my local branch in
> this new tree?  I'm a very basic git user, and the only way I can think
> of is to extract the patches from my old branch and applying them by
> hand in the new tree.  Is there something else I should be doing
> instead?

Hello,

First of all, you can add the new repository as a remote of your old one
(or your old repo in your new tree, if you prefer). This means that both
old and new (rewritten) commits will live in one repository, which also
means you can use full git power instead of having to transfer patches
from one tree to the other. (although that certainly is a solution also)

Then rebasing is your friend, with its "--onto" argument.
Here's my approach. (See also "caveats" at the end)

First, find where your branch diverged from the (now deceased) official
git mirror :

MERGEBASE=$(git merge-base old-mirror-on-savannah/emacs-24 emacs-24)

In the above,
- The name of the branch old-mirror-on-savannah/emacs-24 is clear.
- "emacs-24" is my personnal branch, where I have commits
that are not in the official tree. Alternatively, you can look at the
"git log emacs-24" and write down the first SHA1 that's not a commit of
yours.

Now, you have to find a commit in the branch
emacs-new-savannah-repo/emacs-24 which looks similar to $MERGEBASE,
because that's where you want to graft your commits.

To do that, I look for an identical commit date. This is the kind of
game I can't play well, so please forgive unnecessary complicatedness :

Here's the unix timestamp of $MERGEBASE :
DATESTAMP=$(git --no-pager show  -s --format="%at" $MERGEBASE)

and here is a commit which has the same timestamp :
ONTOHASH=$(git log --format="%H %at" emacs-new-savannah-repo/emacs-24 | grep 
$DATESTAMP'$' | head -1 | cut -d" " -f 1)

(it's awful, surely there's a better way.)

Now you can check that $ONTOHASH and $MERGEBASE are indeed "the same"
commit, and use
git rebase --onto $ONTOHASH $MERGEBASE

Then, repeat for every branch you want to rebase.

"worked for me"... at least I think so :)

-- 
Nicolas Richard



reply via email to

[Prev in Thread] Current Thread [Next in Thread]