[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
- Re: Switching from old git tree, (continued)
- Re: Switching from old git tree, David Kastrup, 2014/11/14
- Re: Switching from old git tree, Kenneth Raeburn, 2014/11/15
- Re: Switching from old git tree, Eli Zaretskii, 2014/11/15
- Re: Switching from old git tree, David Kastrup, 2014/11/15
- Re: Switching from old git tree, Eli Zaretskii, 2014/11/15
- Re: Switching from old git tree, Ken Raeburn, 2014/11/15
Re: Switching from old git tree,
Nicolas Richard <=