git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Linus Torvalds <torvalds@osdl.org>
To: Junio C Hamano <junkio@cox.net>
Cc: Darrin Thompson <darrint@progeny.com>, git@vger.kernel.org
Subject: Re: Patch (apply) vs. Pull
Date: Tue, 21 Jun 2005 15:09:13 -0700 (PDT)	[thread overview]
Message-ID: <Pine.LNX.4.58.0506211452110.2353@ppc970.osdl.org> (raw)
In-Reply-To: <7vbr61j631.fsf@assigned-by-dhcp.cox.net>



On Mon, 20 Jun 2005, Junio C Hamano wrote:
>
> FYI, here is what I have been doing:
> 
>  (1) Start from Linus HEAD.
> 
>  (2) Repeat develop-and-commit cycle.
> 
>  (3) Run "git format-patch" (not in Linus tree) to generate
>      patches.
> 
>  (4) Send them out and wait to see which one sticks.
> 
>  (5) Pull from Linus.
> 
>  (6) Throw away my HEAD, making Linus HEAD my HEAD, while
>      preserving changes I have made since I forked from him.  I
>      use "jit-rewind" for this.
> 
>  (7) Examine patches that Linus rejected, and apply ones that I
>      still consider good, making one commit per patch.  I use
>      "jit-patch" and "jit-commit -m" for this.
> 
>  (8) Go back to step 2.

Btw, I'd like to help automate the 6-7 stage with a different kind of 
merge logic.

The current "real merge" is the global history merge, and that's the kind
that I personally want to use, since that's what makes sense from a
"project lead" standpoint and for the people around me in the kernel space
that are project leaders of their own.

However, as you point out, it's not necessarily the best kind of merge for
the "individual developer" standpoint. Most individual developers don't
necessarily want to merge their work, rather they want to "bring it
forward" to the current tip. And I think git could help with that too.

It would be somewhat akin to the current git-merge-script, but instead of 
merging it based on the common parent, it would instead try to re-base all 
the local commits from the common parent onwards on top of the new remote 
head. That often makes more sense from the standpoint of a individual 
developer who wants to update his work to the remote head.

Something like this (this assumes FETCH_HEAD is the remote head that we 
just fetched with "git fetch xxx" and that we want to re-base to):

 - get the different HEAD info set up, and save the original head in 
   ORIG_HEAD, the way "git resolve" does for real merges:

	: ${GIT_DIR=.git}

	orig=$(git-rev-parse HEAD)
	new=$(git-rev-parse FETCH_HEAD)
	common=$(git-merge-base $orig $new)

	echo $orig > $GIT_DIR/ORIG_HEAD

 - fast-forward to the new HEAD. We'll want to re-base everything off 
   that. If that fails, exit out - we've got dirty state

	git-read-tree -m -u $orig $new && exit 1

 - for each commit that we had in our old tree but not in the common part, 
   try to re-base it:

	> FAILED_TO_CHERRYPICK
	for i in $(git-rev-list $orig ^$common)
	do
		git-cherry-pick $i ||
			(echo $i >> FAILED_TO_CHERRYPICK)
	done
	if [ -s FAILED_TO_CHERRYPICK ]; then
		echo Some commits could not be cherry-picked, check by hand:
		cat FAILED_TO_CHERRYPICK
	fi

and here the "git-cherry-pick" thing is just a script that basically takes
an old commit ID, and tries to re-apply it as a patch (with author data
and commit messages, of course) on top of the current head. It would 
basically be nothing more than a "git-diff-tree $1" followed by tryign to 
figure out whether it had already been applied or whether it can be 
applied now.

What do you think?

		Linus

  parent reply	other threads:[~2005-06-21 22:09 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-06-20 16:19 Patch (apply) vs. Pull Darrin Thompson
2005-06-20 17:22 ` Junio C Hamano
2005-06-20 23:01   ` Darrin Thompson
2005-06-21 18:02     ` Daniel Barkalow
2005-06-22  8:47       ` Junio C Hamano
2005-06-22  9:56       ` Catalin Marinas
2005-06-21 22:09   ` Linus Torvalds [this message]
2005-06-22  9:08     ` Junio C Hamano
2005-06-22 17:21       ` Linus Torvalds
2005-06-22 20:08         ` Daniel Barkalow
2005-06-22 20:22           ` Linus Torvalds
2005-06-22 21:54             ` Daniel Barkalow
2005-06-22 22:21               ` Linus Torvalds
2005-06-23  3:32                 ` Daniel Barkalow
2005-06-23  4:23                   ` Linus Torvalds
2005-06-23  5:15                     ` Daniel Barkalow
2005-06-23  6:09                       ` Linus Torvalds
2005-06-23 16:45                         ` Daniel Barkalow
2005-06-23 18:43                           ` Linus Torvalds
2005-06-23 19:59                             ` Daniel Barkalow
2005-06-23 22:20                               ` Linus Torvalds
2005-06-23 22:49                                 ` Linus Torvalds
2005-06-23 12:10                       ` Catalin Marinas
2005-06-23 17:05                         ` Daniel Barkalow
2005-06-24 13:41                           ` Catalin Marinas
2005-06-23  8:47                 ` Martin Langhoff
2005-06-22 16:23     ` Darrin Thompson
2005-06-23  8:36     ` Martin Langhoff
2005-06-23 23:21     ` [PATCH 0/3] Rebasing for "individual developer" usage Junio C Hamano
2005-06-23 23:27       ` [PATCH 1/3] git-commit-script: get commit message from an existing one Junio C Hamano
2005-06-23 23:28       ` [PATCH 2/3] git-cherry: find commits not merged upstream Junio C Hamano
2005-06-23 23:29       ` [PATCH 3/3] git-rebase-script: rebase local commits to new upstream head Junio C Hamano
2005-06-22 17:04   ` Patch (apply) vs. Pull Catalin Marinas

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

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.58.0506211452110.2353@ppc970.osdl.org \
    --to=torvalds@osdl.org \
    --cc=darrint@progeny.com \
    --cc=git@vger.kernel.org \
    --cc=junkio@cox.net \
    /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.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).