Обсуждение: moving development branch activity to new git repo

Поиск
Список
Период
Сортировка

moving development branch activity to new git repo

От
"Kevin Grittner"
Дата:
I just went to do my usual merge from the git version of HEAD (at
git://git.postgresql.org/git/postgresql.git), and it seemed to be
doing an awful lot of work to prepare to attempt the merge.  That
leads me to think that the newly converted git, or a copy of it, is
now at that location, which is cool.  But I have concerns about what
to do with my development branch off the old one.
I'm afraid that in spite of several attempts, I don't yet properly
have my head around the git approach, and fear that I'll muck things
up without a little direction; and I'd be surprised if I'm the only
one in this position.
Can someone give advice, preferably in the form of a "recipe", for
how to set up a new repo here based on the newly converted repo, and
merge the work from my branch (with all the related history) into a
branch off the new repo?
Thanks for any advice.
-Kevin


Re: moving development branch activity to new git repo

От
Heikki Linnakangas
Дата:
On 21/09/10 18:28, Kevin Grittner wrote:
> I just went to do my usual merge from the git version of HEAD (at
> git://git.postgresql.org/git/postgresql.git), and it seemed to be
> doing an awful lot of work to prepare to attempt the merge.  That
> leads me to think that the newly converted git, or a copy of it, is
> now at that location, which is cool.  But I have concerns about what
> to do with my development branch off the old one.
>
> I'm afraid that in spite of several attempts, I don't yet properly
> have my head around the git approach, and fear that I'll muck things
> up without a little direction; and I'd be surprised if I'm the only
> one in this position.
>
> Can someone give advice, preferably in the form of a "recipe", for
> how to set up a new repo here based on the newly converted repo, and
> merge the work from my branch (with all the related history) into a
> branch off the new repo?

Some ideas:

A) Generate a patch in the old repo, and apply it to the new one. 
Simple, but you lose the history.

B) git rebase. First "git fetch" the new upstream repository into your 
local repository, and use git rebase to apply all the commits in your 
private branch over the new upstream branch. You will likely get some 
conflicts and will need to resolve them by hand, but if you're lucky 
it's not a lot of work.

C) Git grafts. I just tested this method for our internal EDB 
repository, and seems to work pretty well. You will need one line in 
your .git/info/grafts file for each merge commit with upstream that you 
have made. On each line you have 1. commitid of the merge commit 2. 
commitid of the old PostgreSQL commit that was merged 3. commitid of the 
corresponding PostgreSQL commit in the new repository. This lets you 
continue working on your repository as you used to, merging and all, but 
git diff will show that all the $PostgreSQL$ are different from the new 
upstream repository.

I'd suggest that you just do A) and keep the old repository around for 
reference.

--   Heikki Linnakangas  EnterpriseDB   http://www.enterprisedb.com


Re: moving development branch activity to new git repo

От
Andrew Dunstan
Дата:

On 09/21/2010 11:28 AM, Kevin Grittner wrote:
> I just went to do my usual merge from the git version of HEAD (at
> git://git.postgresql.org/git/postgresql.git), and it seemed to be
> doing an awful lot of work to prepare to attempt the merge.  That
> leads me to think that the newly converted git, or a copy of it, is
> now at that location, which is cool.  But I have concerns about what
> to do with my development branch off the old one.
>
> I'm afraid that in spite of several attempts, I don't yet properly
> have my head around the git approach, and fear that I'll muck things
> up without a little direction; and I'd be surprised if I'm the only
> one in this position.
>
> Can someone give advice, preferably in the form of a "recipe", for
> how to set up a new repo here based on the newly converted repo, and
> merge the work from my branch (with all the related history) into a
> branch off the new repo?

I was just mentioning to Magnus a couple of hours ago on chat that this 
would create headaches for some people.

Basically, AIUI, you have to move the old repo aside and freshly clone 
the new repo.

I haven't migrated my development trees yet, but I'm planning on simply 
applying a diff from the old repo to a newly created branch in the new 
repo. However, that does mean losing the private commit history. I'm not 
sure much can be done about that, unless you migrate each commit 
separately, which could be painful. Maybe some of the git gurus have 
better ideas, though.


cheers

andrew



Re: moving development branch activity to new git repo

От
Aidan Van Dyk
Дата:
* Andrew Dunstan <andrew@dunslane.net> [100921 11:59]:
>

> I was just mentioning to Magnus a couple of hours ago on chat that this  
> would create headaches for some people.
>
> Basically, AIUI, you have to move the old repo aside and freshly clone  
> the new repo.
>
> I haven't migrated my development trees yet, but I'm planning on simply  
> applying a diff from the old repo to a newly created branch in the new  
> repo. However, that does mean losing the private commit history. I'm not  
> sure much can be done about that, unless you migrate each commit  
> separately, which could be painful. Maybe some of the git gurus have  
> better ideas, though.

Someone mentioned "git rebase".  That' probably going to be slow on
distint repositories too.  The grafts mentioned will speed that up.

But probably the easiest way, if you have a nice clean history, is to
use "git formatpatch".  This produces a nice "series" of patches, with
your commit message, and content, and dates, all preserved, ready for
re-applying (git am can do that automatically on the new branch), or
emailing, or whatever.

If you're history is a complicated tangle of merges because you
constantly just re-merge the "CVS HEAD" into your dev branch, then it
might be time to just do a massive "diff" and "apply" anyways ;-)

a.

-- 
Aidan Van Dyk                                             Create like a god,
aidan@highrise.ca                                       command like a king,
http://www.highrise.ca/                                   work like a slave.

Re: moving development branch activity to new git repo

От
"Kevin Grittner"
Дата:
Andrew Dunstan <andrew@dunslane.net> wrote:
> Basically, AIUI, you have to move the old repo aside and freshly
> clone the new repo.
I was assuming that, but it's good to have confirmation.  What about
my repo at
http://git.postgresql.org/gitweb?p=users/kgrittn/postgres.git ?
Can that be reset to a copy of the new repo?  (Or is that not really
beneficial?)
> I haven't migrated my development trees yet, but I'm planning on
> simply applying a diff from the old repo to a newly created branch
> in the new repo. However, that does mean losing the private commit
> history.
Yeah, I'd really rather not lose that.
> I'm not sure much can be done about that, unless you migrate each
> commit separately, which could be painful.
Perhaps.  I might be able to use grep and sed to script it, though. 
Right now I think I'd be alright to just pick off commits where the
committer was myself or Dan Ports.  My bash-fu is tolerably good for
such purposes.
> Maybe some of the git gurus have better ideas, though.
I'm all ears.  ;-)
-Kevin


Re: moving development branch activity to new git repo

От
Elvis Pranskevichus
Дата:
On September 21, 2010 12:08:49 pm Kevin Grittner wrote:
> Andrew Dunstan <andrew@dunslane.net> wrote:
> > Basically, AIUI, you have to move the old repo aside and freshly
> > clone the new repo.
> 
> I was assuming that, but it's good to have confirmation.  What about
> my repo at
> 
> http://git.postgresql.org/gitweb?p=users/kgrittn/postgres.git ?
> 
> Can that be reset to a copy of the new repo?  (Or is that not really
> beneficial?)
> 
> > I haven't migrated my development trees yet, but I'm planning on
> > simply applying a diff from the old repo to a newly created branch
> > in the new repo. However, that does mean losing the private commit
> > history.
> 
> Yeah, I'd really rather not lose that.
> 
> > I'm not sure much can be done about that, unless you migrate each
> > commit separately, which could be painful.
> 
> Perhaps.  I might be able to use grep and sed to script it, though.
> Right now I think I'd be alright to just pick off commits where the
> committer was myself or Dan Ports.  My bash-fu is tolerably good for
> such purposes.
> 
> > Maybe some of the git gurus have better ideas, though.
> 
> I'm all ears.  ;-)
> 
> -Kevin

Here's a quick and easy way to move dev history to a new repo:

$ cd postgresql.old
$ git checkout yourbranch

# stream your commits into a "patch mailbox"
$ git format-patch --stdout master..HEAD > patches.mbox

# switch to the new repo
$ cd ../postgresql

# create a branch if not already
$ git checkout -b yourbranch 

# apply the "patch mailbox"
$ git am ../postgresql.old/patches.mbox

That should do the trick.  Your dev history will be kept.

                                   Elvis



Re: moving development branch activity to new git repo

От
Andrew Dunstan
Дата:

On 09/21/2010 12:07 PM, Aidan Van Dyk wrote:
> But probably the easiest way, if you have a nice clean history, is to
> use "git formatpatch".  This produces a nice "series" of patches, with
> your commit message, and content, and dates, all preserved, ready for
> re-applying (git am can do that automatically on the new branch), or
> emailing, or whatever.

Ah. I thought there was something like this but for some reason when I 
went looking for it just now I failed to find it.

Thanks for the info. This looks like the best way to go.

cheers

andrew


Re: moving development branch activity to new git repo

От
Abhijit Menon-Sen
Дата:
At 2010-09-21 11:59:09 -0400, andrew@dunslane.net wrote:
>
> However, that does mean losing the private commit history. I'm not
> sure much can be done about that, unless you migrate each commit
> separately, which could be painful.

It doesn't have to be painful.

Determine what patches from the old repository you want to apply, and
create a branch in the newly-cloned repository to apply them to. Then
use (cd ../oldrepo;git format-patch -k --stdout R1..R2)|git am -3 -k"
to apply a series of patches (between revisions R1 and R2; adjust as
needed) to your branch (i.e. when you have it checked out).

See git-format-patch(1) and git-am(1) for more details (or feel free
to ask if you need more help).

-- ams


Re: moving development branch activity to new git repo

От
"Kevin Grittner"
Дата:
Elvis Pranskevichus <el@prans.net> wrote:
> Here's a quick and easy way to move dev history to a new repo:
> 
> $ cd postgresql.old
> $ git checkout yourbranch
> 
> # stream your commits into a "patch mailbox"
> $ git format-patch --stdout master..HEAD > patches.mbox
> 
> # switch to the new repo
> $ cd ../postgresql
> 
> # create a branch if not already
> $ git checkout -b yourbranch 
> 
> # apply the "patch mailbox"
> $ git am ../postgresql.old/patches.mbox
> 
> That should do the trick.  Your dev history will be kept.
Thanks for the recipe.  (And thanks to all others who responded.)
That still leaves me wondering how I get that out to my public git
repo without someone resetting it on the server.  Or do I have the
ability to clean out the old stuff at:
ssh://git@git.postgresql.org/users/kgrittn/postgres.git
so that I can push the result of the above to it cleanly?
-Kevin


Re: moving development branch activity to new git repo

От
Magnus Hagander
Дата:
On Tue, Sep 21, 2010 at 20:01, Kevin Grittner
<Kevin.Grittner@wicourts.gov> wrote:
> Elvis Pranskevichus <el@prans.net> wrote:
>
>> Here's a quick and easy way to move dev history to a new repo:
>>
>> $ cd postgresql.old
>> $ git checkout yourbranch
>>
>> # stream your commits into a "patch mailbox"
>> $ git format-patch --stdout master..HEAD > patches.mbox
>>
>> # switch to the new repo
>> $ cd ../postgresql
>>
>> # create a branch if not already
>> $ git checkout -b yourbranch
>>
>> # apply the "patch mailbox"
>> $ git am ../postgresql.old/patches.mbox
>>
>> That should do the trick.  Your dev history will be kept.
>
> Thanks for the recipe.  (And thanks to all others who responded.)
>
> That still leaves me wondering how I get that out to my public git
> repo without someone resetting it on the server.  Or do I have the
> ability to clean out the old stuff at:
>
> ssh://git@git.postgresql.org/users/kgrittn/postgres.git
>
> so that I can push the result of the above to it cleanly?

a git push *should* work, but we've seen issues with that.

The cleanest is probably if I wipe the repo on git.postgresql.org for
you, and you then re-push from scratch. Does thta work for you?


--
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/


Re: moving development branch activity to new git repo

От
Heikki Linnakangas
Дата:
On 21/09/10 21:01, Kevin Grittner wrote:
> That still leaves me wondering how I get that out to my public git
> repo without someone resetting it on the server.  Or do I have the
> ability to clean out the old stuff at:
>
> ssh://git@git.postgresql.org/users/kgrittn/postgres.git
>
> so that I can push the result of the above to it cleanly?

git push --force allows you to push the new branches over the old ones.

I don't think it will automatically garbage collect the old stuff 
though, so the repository will be bloated until "git gc" runs (with 
--aggressive or something, not sure). I don't know when or how that 
happens in the public repos.

--   Heikki Linnakangas  EnterpriseDB   http://www.enterprisedb.com


Re: moving development branch activity to new git repo

От
"Kevin Grittner"
Дата:
Magnus Hagander <magnus@hagander.net> wrote:
> The cleanest is probably if I wipe the repo on git.postgresql.org
> for you, and you then re-push from scratch. Does thta work for
> you?
Sure.  Thanks.
-Kevin


Re: moving development branch activity to new git repo

От
Magnus Hagander
Дата:
On Tue, Sep 21, 2010 at 20:16, Kevin Grittner
<Kevin.Grittner@wicourts.gov> wrote:
> Magnus Hagander <magnus@hagander.net> wrote:
>
>> The cleanest is probably if I wipe the repo on git.postgresql.org
>> for you, and you then re-push from scratch. Does thta work for
>> you?
>
> Sure.  Thanks.

done, should be available for push now.


--
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/


Re: moving development branch activity to new git repo

От
Peter Eisentraut
Дата:
On tis, 2010-09-21 at 20:04 +0200, Magnus Hagander wrote:
> The cleanest is probably if I wipe the repo on git.postgresql.org for
> you, and you then re-push from scratch.

We probably need a solution that doesn't require manual intervention for
everyone separately.



Re: moving development branch activity to new git repo

От
Magnus Hagander
Дата:
On Tue, Sep 21, 2010 at 20:28, Peter Eisentraut <peter_e@gmx.net> wrote:
> On tis, 2010-09-21 at 20:04 +0200, Magnus Hagander wrote:
>> The cleanest is probably if I wipe the repo on git.postgresql.org for
>> you, and you then re-push from scratch.
>
> We probably need a solution that doesn't require manual intervention for
> everyone separately.

Are there really that many? If nothing else, it's a good way to figure
out which repos are actually used ;)


--
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/


Re: moving development branch activity to new git repo

От
"Kevin Grittner"
Дата:
Elvis Pranskevichus <el@prans.net> wrote:
> # apply the "patch mailbox"
> $ git am ../postgresql.old/patches.mbox
That's not working for me.
Applying: Provide two macros for categorizing current transaction
isolation level (IsXactIsoLevelXactSnapshotBased and
IsXactIsoLevelFullySerializable) to replace the
IsXactIsoLevelSerializable macro. Adjust comments to reflect the
distinction, and rename a now-misleading variable.
error: patch failed: src/backend/catalog/index.c:2133
error: src/backend/catalog/index.c: patch does not apply
error: patch failed: src/backend/commands/trigger.c:2319
error: src/backend/commands/trigger.c: patch does not apply
error: patch failed: src/backend/executor/execMain.c:1538
error: src/backend/executor/execMain.c: patch does not apply
error: patch failed: src/backend/executor/nodeLockRows.c:130
error: src/backend/executor/nodeLockRows.c: patch does not apply
error: patch failed: src/backend/executor/nodeModifyTable.c:326
error: src/backend/executor/nodeModifyTable.c: patch does not apply
error: patch failed: src/backend/utils/adt/ri_triggers.c:3314
error: src/backend/utils/adt/ri_triggers.c: patch does not apply
error: patch failed: src/backend/utils/time/snapmgr.c:37
error: src/backend/utils/time/snapmgr.c: patch does not apply
error: patch failed: src/include/access/xact.h:32
error: src/include/access/xact.h: patch does not apply
Patch failed at 0001 Provide two macros for categorizing current
transaction isolation level (IsXactIsoLevelXactSnapshotBased and
IsXactIsoLevelFullySerializable) to replace the
IsXactIsoLevelSerializable macro. Adjust comments to reflect the
distinction, and rename a now-misleading variable.
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am
--abort".
For the record, this branch was regularly merged with changes from
the master branch of the old PostgreSQL git repo which was a copy of
CVS head.  I filtered out the 167 non-merge commits on my
serializable branch since 8 Jan 2010.  Is there any practical way to
resolve this so that I can keep the history?
-Kevin


Re: moving development branch activity to new git repo

От
Elvis Pranskevichus
Дата:
On September 21, 2010 07:32:57 pm Kevin Grittner wrote:
> Elvis Pranskevichus <el@prans.net> wrote:
> > # apply the "patch mailbox"
> > $ git am ../postgresql.old/patches.mbox
> 
> That's not working for me.
> 
> Applying: Provide two macros for categorizing current transaction
> isolation level (IsXactIsoLevelXactSnapshotBased and
> IsXactIsoLevelFullySerializable) to replace the
> IsXactIsoLevelSerializable macro. Adjust comments to reflect the
> distinction, and rename a now-misleading variable.
> error: patch failed: src/backend/catalog/index.c:2133
> error: src/backend/catalog/index.c: patch does not apply
> error: patch failed: src/backend/commands/trigger.c:2319
> error: src/backend/commands/trigger.c: patch does not apply
> error: patch failed: src/backend/executor/execMain.c:1538
> error: src/backend/executor/execMain.c: patch does not apply
> error: patch failed: src/backend/executor/nodeLockRows.c:130
> error: src/backend/executor/nodeLockRows.c: patch does not apply
> error: patch failed: src/backend/executor/nodeModifyTable.c:326
> error: src/backend/executor/nodeModifyTable.c: patch does not apply
> error: patch failed: src/backend/utils/adt/ri_triggers.c:3314
> error: src/backend/utils/adt/ri_triggers.c: patch does not apply
> error: patch failed: src/backend/utils/time/snapmgr.c:37
> error: src/backend/utils/time/snapmgr.c: patch does not apply
> error: patch failed: src/include/access/xact.h:32
> error: src/include/access/xact.h: patch does not apply
> Patch failed at 0001 Provide two macros for categorizing current
> transaction isolation level (IsXactIsoLevelXactSnapshotBased and
> IsXactIsoLevelFullySerializable) to replace the
> IsXactIsoLevelSerializable macro. Adjust comments to reflect the
> distinction, and rename a now-misleading variable.
> When you have resolved this problem run "git am --resolved".
> If you would prefer to skip this patch, instead run "git am --skip".
> To restore the original branch and stop patching run "git am
> --abort".
> 
> For the record, this branch was regularly merged with changes from
> the master branch of the old PostgreSQL git repo which was a copy of
> CVS head.  I filtered out the 167 non-merge commits on my
> serializable branch since 8 Jan 2010.  Is there any practical way to
> resolve this so that I can keep the history?
> 
> -Kevin

Instead of filtering non-merge commits I would suggest doing git rebase on the 
latest revision of the old git repo.  That way you will get a set of commits 
that should apply cleanly.  The reason it is failing now is that it is 
impossible for git am to do a 3-way merge without the original git objects, 
which are obviously not available in the new repo.

                                   Elvis


Re: moving development branch activity to new git repo

От
"Kevin Grittner"
Дата:
Elvis Pranskevichus <el@prans.net> wrote:
> Instead of filtering non-merge commits I would suggest doing git
> rebase on the latest revision of the old git repo.  That way you
> will get a set of commits that should apply cleanly.  The reason
> it is failing now is that it is impossible for git am to do a
> 3-way merge without the original git objects, which are obviously
> not available in the new repo.
Well, that didn't work much better.  It applied, but it started in
June, and the "big" file, which has been in constant flux since
January suddenly springs into existence in July.  :-(  The last few
commits look right, but it gets pretty trashy pretty quickly before
that.
What *did* work is to take a fresh of the new repo, branch it as of
the point in time that I created my original branch, and take the
first mbox entry of the 167, which starts like this:
From 07ea78aaafe22cbbb0ffdedbfcf78404abbdbc70 Mon Sep 17 00:00:00
2001
From: Kevin Grittner <Kevin.Grittner@wicourts.gov>
Date: Fri, 8 Jan 2010 15:39:12 -0600 
and change the first line to point to the point at which this was
applied:
From 369494e41fe408f103884032f477555ba134a0a8 Fri Jan 8 09:06:05
2010
That applies fine.  It's an encouraging start, but I'm not clear on
exactly what I have to do to get the rest of these commits merged in
with commits from the master branch cleanly.  Some fix-up work is OK
with me.  Do I need to look at the old log and manually interleave
merges to the branch and manual commits in the original pattern to
make such a scheme work?
-Kevin


Re: moving development branch activity to new git repo

От
"Kevin Grittner"
Дата:
"Kevin Grittner" <Kevin.Grittner@wicourts.gov> wrote:
> Well, that didn't work much better.
I decided I'd reached my limit on this.  I fell back to a suggestion
made a while back, and just created a patch from the old repository
and applied it to the new one.  I've pushed it to the public repo,
but haven't yet had a chance to confirm that all is well.  I will
keep the old repo in case there is any need to prove the development
history.  (Unlikely, but it seems prudent to cover the bases.)
So, no further advice on this topic needed here.
-Kevin