threads / discuss / 20174

synchronizing 2 heterogenous branches by cherry-pick

Subject: synchronizing 2 heterogenous branches by cherry-pick

## tl;dr

4 messages between Jul 21, 2009 and Jul 23, 2009.

replies: 3people: 2as markdown or json

Martin Pirker· Jul 21, 2009, 12:42 UTC · lore
One of those weird real-world situations, advice appreciated:

Given... one Git repository with one branch "left" and one branch "right" both branches have a different history (common ancestor is 0000000) both branches have different content _however_, at one specific commit in the "left" and "right" branch it can be said that the content of specific subdirectories is identical these commits are marked with a tag "equal"

Thus, patches which only modify the identical content can always be applied without conflicts on both branches. I commit a new patch on "left", I can cherry-pick it to "right" and both trees are identical again.

Issues: Cheery-pick takes only one commit. I have to find commits by hand. Ideally, I want to specify equal..HEAD, if 10 commits are "left" and "right" are 7, well, then cherry pick the last 3 from "left" to "right". Note that the patch content is always identical, the commit text message (author/committer/timestamp/...) not always Note that ideally only one way synchronizing occurs. Bonus points if I can add on both sides and then start magic sync...

Any good idea on how to automagically script these cherry-picking?
Martin
Martin Pirker· Jul 23, 2009, 08:41 UTC · re: Martin Pirker · lore

Re: synchronizing 2 heterogenous branches by cherry-pick

I'm replying to myself.... for the archives :-)

On Tue, Jul 21, 2009 at 2:42 PM, Martin Pirker<git.collector@gmail.com> wrote: [....]

>Any good idea on how to automagically script these cherry-picking?
tag identical content point in different branches:
 git tag tag1 commitx
 git tag tag2 commity
get list of newer commits:
 git rev-list tag1^..head1
 git rev-list tag2^..head2

compare content of commits via: git diff --exit-code commit1 commit2

...and cherry-pick resulting list from one side to the other

Git is an amazing toolbox :-) Martin

Pierre Habouzit· Jul 23, 2009, 08:51 UTC · re: Martin Pirker · lore

Re: synchronizing 2 heterogenous branches by cherry-pick

On Thu, Jul 23, 2009 at 10:41:37AM +0200, Martin Pirker wrote:
Show 18 quoted lines
> I'm replying to myself.... for the archives :-)
> 
> On Tue, Jul 21, 2009 at 2:42 PM, Martin Pirker<git.collector@gmail.com> wrote:
> [....]
> >Any good idea on how to automagically script these cherry-picking?
> 
> tag identical content point in different branches:
>  git tag tag1 commitx
>  git tag tag2 commity
> 
> get list of newer commits:
>  git rev-list tag1^..head1
>  git rev-list tag2^..head2
> 
> compare content of commits via:
> git diff --exit-code commit1 commit2
> 
> ....and cherry-pick resulting list from one side to the other
Or use git cherry
-- 
Intersec <http://www.intersec.com>
Pierre Habouzit <pierre.habouzit@intersec.com>
Tél : +33 (0)1 5570 3346
Mob : +33 (0)6 1636 8131
Fax : +33 (0)1 5570 3332
37 Rue Pierre Lhomme
92400 Courbevoie
Martin Pirker· Jul 23, 2009, 09:24 UTC · re: Pierre Habouzit · lore

Re: synchronizing 2 heterogenous branches by cherry-pick

On Thu, Jul 23, 2009 at 10:51 AM, Pierre Habouzit<madcoder@madism.org> wrote:
> Or use git cherry

I tried, but I was under the impression git patch-id also hashes the commit message - or I got something else typed wrong 'cause it didn't seem to work :-/

You are right, the solution is:
 git cherry head1 head2 tag2
 git cherry head2 head1 tag1
and cherry-pick all lines prefixed with + to the other branch.

Thanks, Martin

← back to recent threads