From: Matthew Ogilvie <mmogilvi_git@miniinfo.net>
To: Pierre Penninckx <ibizapeanut@gmail.com>
Cc: git@vger.kernel.org, greened@obbligato.org, amdmi3@amdmi3.ru,
john@keeping.me.uk, git@cryptocrack.de, techlivezheng@gmail.com,
apenwarr@gmail.com, cstanfield@antifusion.net,
jakub.suder@gmail.com, jesse.greenwald@gmail.com,
pelle@kodfabrik.se, treese@acm.org, wayne@tickzoom.com
Subject: Re: [PATCH] subtree: add squash handling for split and push
Date: Thu, 28 Nov 2013 11:23:09 -0700 [thread overview]
Message-ID: <20131128182309.GA3655@comcast.net> (raw)
In-Reply-To: <C3EF61D4-5274-4A10-9594-4E631D75C3F4@gmail.com>
On Sat, Nov 23, 2013 at 09:18:56PM +0100, Pierre Penninckx wrote:
> The documentation of subtree says that the --squash option can be used
> for add, merge, split and push subtree commands but only add and merge
> is implemented.
Clarification: The current documentation (correctly) doesn't
actually claim to support "split --squash", but it does erroneously
claim to support "push --squash".
> cmd_split() first lets split do it's job: finding which commits need to
> be extracted. Now we remember which commit is the parent of the first
> extracted commit. When this step is done, cmd_split() generates a squash
> of the new commits, starting from the aforementioned parent to the last
> extracted commit. This new commit's sha1 is then used for the rest of
> the script.
I've been planning to implement something similar to this patch,
but the semantics I am aiming at are slightly different.
It looks like your patch is basically squashing the new subtree commits
together, throwing out those commits completely, and only keeping
the squashed commit in the split --branch.
I intend to implement slightly different semantics, where
--squash only affects --rejoin, not the printed commit nor
the split-off --branch. This is intended to provide a better,
third option for --rejoin'ing a subtree with a lot of history,
while preserving history in the split-off branch:
1. (existing/slow) Don't ever use --rejoin at all? You can use
"merge --squash" to merge in unrelated changes to the
split-off project, but every "split" still gets slower
and slower as each "split" needs to re-sift-through all
the same history the previous "split"s have sifted
through.
2. (existing/huge mass of duplicated history) Use "split --rejoin"
occasionally. This pulls in the entire history of the
subtree branch (since the last --rejoin or non-squash merge,
or everything if neither has been done), which is difficult
to ignore when looking at global history of the full project,
especially if it is many pages of commits. But subsequent
splits can stop history traversal at the known-common point,
and will run MUCH faster.
3. (new/better) Use "split --rejoin --squash" (or some other
invocation to be defined). The subtree branch is generated
exactly like normal, including fine-grained history. But
instead of merging the subtree branch directly, --rejoin
will squash all the changes to that branch, and merge in
just the squash (referencing the unsquashed split
branch tip in the commit message, but not the
parent). Subsequent splits can run very fast, while the
"--rejoin" only generated two commits instead of the
potentially thousands of (mostly) duplicates it would pull
in without the "--squash".
I have this third option half-coded already, but I still need
to finish it.
I'm fairly sure I can make this work without new adverse effects,
but if someone sees something I'm missing, let me know.
Does anyone have any suggestions about the UI? Do we need to also
support Pierre Penninckx's "split --squash" semantics somehow? If
so, what command line options would allow for distinguishing the
two cases?
--
Matthew Ogilvie [mmogilvi_git@miniinfo.net]
next prev parent reply other threads:[~2013-11-28 18:29 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-23 20:18 [PATCH] subtree: add squash handling for split and push Pierre Penninckx
2013-11-28 18:23 ` Matthew Ogilvie [this message]
2013-11-28 22:58 ` Pierre Penninckx
2013-12-07 18:21 ` [PATCH 1/4] subtree: support split --rejoin --squash Matthew Ogilvie
2013-12-07 18:21 ` [PATCH 2/4] subtree: allow --squash and --message with push Matthew Ogilvie
2013-12-07 18:21 ` [PATCH 3/4] subtree: add --edit option Matthew Ogilvie
2013-12-07 18:21 ` [PATCH/BAD 4/4] subtree: poor bugfix for split new commits with parents before previous split Matthew Ogilvie
2013-12-10 22:46 ` [PATCH 1/4] subtree: support split --rejoin --squash Junio C Hamano
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131128182309.GA3655@comcast.net \
--to=mmogilvi_git@miniinfo.net \
--cc=amdmi3@amdmi3.ru \
--cc=apenwarr@gmail.com \
--cc=cstanfield@antifusion.net \
--cc=git@cryptocrack.de \
--cc=git@vger.kernel.org \
--cc=greened@obbligato.org \
--cc=ibizapeanut@gmail.com \
--cc=jakub.suder@gmail.com \
--cc=jesse.greenwald@gmail.com \
--cc=john@keeping.me.uk \
--cc=pelle@kodfabrik.se \
--cc=techlivezheng@gmail.com \
--cc=treese@acm.org \
--cc=wayne@tickzoom.com \
/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.
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 NNTP newsgroup(s).