From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: Elijah Newren <newren@gmail.com>
Cc: "Johannes Altmanninger" <aclopte@gmail.com>,
"Junio C Hamano" <gitster@pobox.com>,
"Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com>,
"Git Mailing List" <git@vger.kernel.org>,
"Christian Couder" <chriscool@tuxfamily.org>,
"Taylor Blau" <me@ttaylorr.com>,
"Ramsay Jones" <ramsay@ramsayjones.plus.com>,
"Christian Couder" <christian.couder@gmail.com>,
"René Scharfe" <l.s.r@web.de>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
"Johannes Sixt" <j6t@kdbg.org>
Subject: Re: [PATCH v3 04/15] merge-tree: implement real merges
Date: Mon, 21 Feb 2022 10:06:13 +0100 (CET) [thread overview]
Message-ID: <nycvar.QRO.7.76.6.2202210956430.26495@tvgsbejvaqbjf.bet> (raw)
In-Reply-To: <CABPp-BH_TiJaDpn2+VVjCb83NEFjL9teSk06+YiZyFGiTu8Lpg@mail.gmail.com>
Hi,
On Thu, 3 Feb 2022, Elijah Newren wrote:
> On Thu, Feb 3, 2022 at 2:42 AM Johannes Altmanninger <aclopte@gmail.com> wrote:
> >
> > On Wed, Feb 02, 2022 at 04:18:39PM -0800, Elijah Newren wrote:
> > > On Wed, Feb 2, 2022 at 2:01 PM Junio C Hamano <gitster@pobox.com> wrote:
> > > >
> > > > Elijah Newren <newren@gmail.com> writes:
> > > >
> > > > > Yes, you are reading right. I think the cherry-pick/rebase
> > > > > replacement actually deserves a separate command from what merges
> > > > > should use; replaying a sequence of commits just has a number of UI
> > > > > differences and abilities that I think pull it in a different
> > > > > direction.
> > > >
> > > > I completely disagree. Each individual step in a sequence of
> > > > replaying commits in order (or in reverse order) should be
> > > > scriptable as a single merge-tree that takes "apply the change to go
> > > > from A^ to A on X". Sequencing and placing UI around it is a job
> > > > for the script that drives merge-tree.
> > >
> > > Adding such an ability to merge-tree would be trivial -- it basically
> > > involves just two things: (1) accepting one extra argument, and (2)
> > > calling merge_incore_nonrecursive() instead of
> > > merge_incore_recursive().
> > >
> > > However, I think forking a subprocess for every merge of a series of
> > > commits is a completely unreasonable overhead, so even if we provide
> > > such an option to merge-tree, I still want a separate plumbing-ish
> > > tool that does non-worktree/non-index replaying of commits which is
> > > not written as a driver of merge-tree. That other tool should just
> > > call merge_incore_nonrecursive() directly. And such a tool, since it
> > > should handle an arbitrary number of commits, should certainly be able
> > > to handle just one commit. From that angle, it feels like adding
> > > another mode to merge-tree would just be a partial duplication of the
> > > other tool.
> >
> > I wonder how the UI of a tool that does non-worktree/non-index cherry-picks
> > will look like. I'd expect it to produce the same output as merge-tree,
> > except cherry-pick should probably output a commit OID, not a tree.
> >
> > Maybe we want a unified command that produces commits from any sequence of
> > merge/cherry-pick/revert/reword steps. The obvious UI would use something
> > like the rebase-todo list as input. For example:
> >
> > $ echo '
> > pick commit1
> > reword commit2 # edit commit message in $GIT_EDITOR
> > merge commit3 -m "log message"
> > ' | git create-commit commit0
> > <OID of final commit>
> >
> > we start from commit0 and apply steps one-by-one. Obviously, one unsolved
> > problem is how to pass parameters like commit messages if no editor should
> > be invoked (my sketch uses -m).
> > If any of the steps fails when merging merge, then we get the tree with
> > conflicts
> >
> > $ echo '
> > pick commit1
> > pick commit2
> > pick commit-that-does-not-apply
> > ' | git create-commit commit0
> > <OID of commit after step 2>
> > <OID of toplevel tree after failed merge>
> > <Conflicted file info>
> > <Informational messages>
> >
> > Replaying a series of commits might look like this:
> >
> > $ echo 'pick commit1 ^commit0' | git create-commit new-base
> >
> > I'm concluding that this is a difficult UI problem
>
> I agree. I've got a lot of thoughts on it, and some work in progress
> towards it (https://github.com/newren/git/tree/replay -- _very_ hacky,
> not even close to alpha quality, lots of fixup commits, todo comments,
> random brain dump files added to the tree, based on a previous round
> of this patch series, not updated for weeks, etc., etc.)
Just chiming in that I find that very exciting. But it's a tangent, and
slightly distracting from the topic at hand, so I would like to ask to
focus back on server-side merges.
> > and having a merge-tree command that accepts a "common ancestor"
> > parameter could make it easier to experiment. Of course that depends
> > on who is experimenting.
>
> I think that would result in experiments and eventually full-blown
> scripts designed around forking subprocesses for every merge, and
> pushes us back into the world of having a scripted-rebase again. Yes,
> I know people can transliterate shell back to C; it seems to always be
> done as a half-way measure with the forking just being done from C or
> have other UI-warts guided by the shell design. In fact, *that* was
> the primary reason for me not providing a merge-tree option based on
> merge_incore_nonrecursive(), despite how trivial it'd be to provide
> it. If someone wanted a merge_incore_nonrecursive() mode for
> merge-tree for reasons other than attempting to build a
> rebase/cherry-pick replacement based on it, then I'd be much happier
> to provide it.
>
> If someone wants to experiment with what a plumbing-ish
> rebase/cherry-pick would look like, the _right_ way to do it would be
> making using of merge_incore_nonrecursive() directly. If they want
> example code, I already provided some a year and a half ago and got it
> merged into git.git in the form of t/helper/test-fast-rebase.c. My
> "replay" branch is based on that code, but (a) moves it from t/helper
> to a real builtin, (b) removes the hardcoded very strict input, (c)
> removes the line of code doing the index & working tree updates, and
> (d) modifies the output to be a more plumbing-ish style.
I actually implemented that so I could provide apples-to-apples
speed comparisons between libgit2 and merge-ort:
-- snip --
From 6a865c691810b67dc15ddb57ad110bd6fdfc2f12 Mon Sep 17 00:00:00 2001
From: Johannes Schindelin <johannes.schindelin@gmx.de>
Date: Fri, 28 Jan 2022 23:28:20 +0100
Subject: [PATCH] merge-tree: optionally force a simple 3-way merge
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
builtin/merge-tree.c | 72 ++++++++++++++++++++++++++++++--------------
1 file changed, 50 insertions(+), 22 deletions(-)
diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c
index 58c0ddc5a3..1007aaaede 100644
--- a/builtin/merge-tree.c
+++ b/builtin/merge-tree.c
@@ -396,6 +396,7 @@ struct merge_tree_options {
int allow_unrelated_histories;
int show_messages;
int exclude_modes_oids_stages;
+ const char *nonrecursive_base;
};
static int real_merge(struct merge_tree_options *o,
@@ -409,34 +410,58 @@ static int real_merge(struct merge_tree_options *o,
struct merge_options opt;
struct merge_result result = { 0 };
- parent1 = get_merge_parent(branch1);
- if (!parent1)
- help_unknown_ref(branch1, "merge-tree",
- _("not something we can merge"));
-
- parent2 = get_merge_parent(branch2);
- if (!parent2)
- help_unknown_ref(branch2, "merge-tree",
- _("not something we can merge"));
-
init_merge_options(&opt, the_repository);
opt.show_rename_progress = 0;
- opt.branch1 = branch1;
- opt.branch2 = branch2;
+ if (o->nonrecursive_base) {
+ struct object_id base_oid, head_oid, merge_oid;
+ struct tree *base_tree, *head_tree, *merge_tree;
+
+ opt.ancestor = "(base)";
+ opt.branch1 = "(branch1)";
+ opt.branch2 = "(branch2)";
+
+ if (get_oid_treeish(o->nonrecursive_base, &base_oid))
+ die("could not parse base '%s'", o->nonrecursive_base);
+ base_tree = parse_tree_indirect(&base_oid);
+ if (get_oid_treeish(branch1, &head_oid))
+ die("could not parse head '%s'", branch1);
+ head_tree = parse_tree_indirect(&head_oid);
+ if (get_oid_treeish(branch2, &merge_oid))
+ die("could not parse merge '%s'", branch2);
+ merge_tree = parse_tree_indirect(&merge_oid);
+
+ merge_incore_nonrecursive(&opt,
+ base_tree, head_tree, merge_tree,
+ &result);
+ } else {
+ parent1 = get_merge_parent(branch1);
+ if (!parent1)
+ help_unknown_ref(branch1, "merge-tree",
+ _("not something we can merge"));
+
+ parent2 = get_merge_parent(branch2);
+ if (!parent2)
+ help_unknown_ref(branch2, "merge-tree",
+ _("not something we can merge"));
+
+ opt.branch1 = branch1;
+ opt.branch2 = branch2;
- /*
- * Get the merge bases, in reverse order; see comment above
- * merge_incore_recursive in merge-ort.h
- */
- common = get_merge_bases(parent1, parent2);
- if (!common && !o->allow_unrelated_histories)
- die(_("refusing to merge unrelated histories"));
- for (j = common; j; j = j->next)
- commit_list_insert(j->item, &merge_bases);
+ /*
+ * Get the merge bases, in reverse order; see comment above
+ * merge_incore_recursive in merge-ort.h
+ */
+ common = get_merge_bases(parent1, parent2);
+ if (!common && !o->allow_unrelated_histories)
+ die(_("refusing to merge unrelated histories"));
+ for (j = common; j; j = j->next)
+ commit_list_insert(j->item, &merge_bases);
+
+ merge_incore_recursive(&opt, merge_bases, parent1, parent2, &result);
+ }
- merge_incore_recursive(&opt, merge_bases, parent1, parent2, &result);
if (result.clean < 0)
die(_("failure to merge"));
@@ -501,6 +526,9 @@ int cmd_merge_tree(int argc, const char **argv, const char *prefix)
&o.allow_unrelated_histories,
N_("allow merging unrelated histories"),
PARSE_OPT_NONEG),
+ OPT_STRING(0, "force-non-recursive-base", &o.nonrecursive_base,
+ N_("base-tree"),
+ N_("force a simple three-way merge")),
OPT_END()
};
-- snap --
I do strongly agree that this should _not_ enter core Git's code, I just
provide this in case someone else wants to play with merge-ort on the
server side in an existing code base.
> We'll certainly have discussions on what that should look like. But a
> plumbing-ish replacement for merge was much simpler, and made sense to
> do first. I would prefer to concentrate on getting that hammered down
> first. Then I'll start discussions on a plumbing-ish
> rebase/cherry-pick. And if that doesn't fulfill all the needs that
> folks think they want out of merge-tree, then we can add a
> merge_incore_nonrecursive()-based mode to merge-tree. It's all
> coming, but having fought transliterations-of-scripts in
> merge-recursive.c, sequencer.c, stash.c, rebase.c, etc. for years I
> really, really don't want any more of that. Let's end that insanity.
Being the driving force behind many a "built-in-ification" of scripted
commands, I wholeheartedly agree. You can still see the fall-out of
designing commands in a scripted fashion, without any way to represent
data structures other than strings. I wish we had come up with a better
design to prototype commands than to write shell scripts. But I have to
admit that even I do not have any better idea than to work on a proper API
for libgit.a (which has historically invariably seen push-back from
Junio).
While I agree that this discussion is a valuable one, right now I would
like to focus on getting the server-side merges done, and once that has
happened, move on to the replay/sequencer/API discussion (which will
probably be a big one, not so much for technical reasons but more for all
too human ones).
Ciao,
Dscho
next prev parent reply other threads:[~2022-02-21 17:51 UTC|newest]
Thread overview: 240+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-22 21:55 [PATCH 00/12] RFC: In-core git merge-tree ("Server side merges") Elijah Newren via GitGitGadget
2022-01-22 21:55 ` [PATCH 01/12] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-01-22 21:55 ` [PATCH 02/12] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-01-22 21:55 ` [PATCH 03/12] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-01-23 8:05 ` René Scharfe
2022-01-24 16:43 ` Elijah Newren
2022-01-24 9:46 ` Ævar Arnfjörð Bjarmason
2022-01-24 16:54 ` Elijah Newren
2022-01-22 21:55 ` [PATCH 04/12] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-01-24 9:51 ` Ævar Arnfjörð Bjarmason
2022-01-24 17:12 ` Elijah Newren
2022-01-25 17:07 ` Johannes Schindelin
2022-01-26 9:44 ` Christian Couder
2022-01-29 4:09 ` Elijah Newren
2022-01-22 21:55 ` [PATCH 05/12] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-01-24 9:56 ` Ævar Arnfjörð Bjarmason
2022-01-25 1:59 ` Elijah Newren
2022-01-28 16:09 ` Johannes Schindelin
2022-01-22 21:55 ` [PATCH 06/12] merge-ort: allow update messages to be written to different file stream Elijah Newren via GitGitGadget
2022-01-28 16:31 ` Johannes Schindelin
2022-01-29 4:33 ` Elijah Newren
2022-01-22 21:55 ` [PATCH 07/12] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-01-26 10:42 ` Christian Couder
2022-01-29 4:52 ` Elijah Newren
2022-01-28 16:37 ` Johannes Schindelin
2022-01-29 4:46 ` Elijah Newren
2022-01-22 21:55 ` [PATCH 08/12] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-01-26 10:55 ` Christian Couder
2022-01-29 4:55 ` Elijah Newren
2022-01-26 11:07 ` Christian Couder
2022-01-29 5:06 ` Elijah Newren
2022-01-28 16:55 ` Johannes Schindelin
2022-01-29 6:08 ` Elijah Newren
2022-01-29 8:23 ` Johannes Sixt
2022-01-29 16:47 ` Elijah Newren
2022-02-04 23:10 ` Johannes Schindelin
2022-02-05 0:54 ` Elijah Newren
2022-02-21 10:46 ` Johannes Schindelin
2022-02-21 14:27 ` Ævar Arnfjörð Bjarmason
2022-02-21 14:28 ` machine-parsable git-merge-tree messages (was: [PATCH 08/12] merge-ort: provide a merge_get_conflicted_files() helper function) Ævar Arnfjörð Bjarmason
2022-02-23 4:00 ` Elijah Newren
2022-02-28 8:50 ` Ævar Arnfjörð Bjarmason
2022-03-01 3:49 ` Elijah Newren
2022-02-22 16:54 ` [PATCH 08/12] merge-ort: provide a merge_get_conflicted_files() helper function Johannes Schindelin
2022-02-23 3:13 ` Elijah Newren
2022-02-25 16:26 ` Johannes Schindelin
2022-02-23 2:15 ` Elijah Newren
2022-02-25 16:31 ` Johannes Schindelin
2022-02-25 18:40 ` Junio C Hamano
2022-02-26 6:53 ` Elijah Newren
2022-03-07 16:27 ` Johannes Schindelin
2022-03-08 8:25 ` Elijah Newren
2022-03-10 15:10 ` Johannes Schindelin
2022-05-13 10:21 ` Johannes Schindelin
2022-05-17 8:23 ` Elijah Newren
2022-06-03 22:11 ` Johannes Schindelin
2022-06-05 15:40 ` Johannes Schindelin
2022-06-05 22:42 ` Johannes Schindelin
2022-06-06 21:37 ` Johannes Schindelin
2022-06-07 7:38 ` Elijah Newren
2022-06-17 23:44 ` Elijah Newren
2022-06-18 21:58 ` Johannes Schindelin
2022-01-22 21:55 ` [PATCH 09/12] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-01-24 10:01 ` Ævar Arnfjörð Bjarmason
2022-01-24 17:18 ` Elijah Newren
2022-01-28 16:57 ` Johannes Schindelin
2022-01-29 6:21 ` Elijah Newren
2022-02-04 23:12 ` Johannes Schindelin
[not found] ` <CABPp-BFyaakDSjHULpBRPQqq_jz2keyufHo1MjNS6dHQNR+JLQ@mail.gmail.com>
2022-02-21 9:31 ` Johannes Schindelin
2022-01-22 21:56 ` [PATCH 10/12] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-01-24 10:06 ` Ævar Arnfjörð Bjarmason
2022-01-24 17:30 ` Elijah Newren
2022-01-22 21:56 ` [PATCH 11/12] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-01-22 21:56 ` [PATCH 12/12] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
2022-01-26 8:48 ` [PATCH 00/12] RFC: In-core git merge-tree ("Server side merges") Christian Couder
2022-01-26 12:02 ` Johannes Schindelin
2022-01-26 14:44 ` Christian Couder
2022-01-28 12:58 ` Johannes Schindelin
2022-01-28 13:37 ` Christian Couder
2022-01-28 16:05 ` Johannes Schindelin
2022-01-29 7:03 ` Elijah Newren
2022-01-29 8:17 ` Christian Couder
2022-01-29 17:43 ` Elijah Newren
2022-01-31 17:45 ` Elijah Newren
2022-01-28 17:00 ` Johannes Schindelin
2022-01-29 18:07 ` [PATCH v2 00/13] " Elijah Newren via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 01/13] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 02/13] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 03/13] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-02-02 21:30 ` Junio C Hamano
2022-01-29 18:07 ` [PATCH v2 04/13] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-02-02 21:30 ` Junio C Hamano
2022-02-02 22:00 ` Elijah Newren
2022-02-21 8:40 ` Johannes Schindelin
2022-01-29 18:07 ` [PATCH v2 05/13] diff: allow diff_warn_rename_limit to write somewhere besides stdout Johannes Schindelin via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 06/13] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 07/13] merge-ort: allow update messages to be written to different file stream Elijah Newren via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 08/13] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-02-02 21:30 ` Junio C Hamano
2022-02-02 23:09 ` Elijah Newren
2022-01-29 18:07 ` [PATCH v2 09/13] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-01-29 18:07 ` [PATCH v2 10/13] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-02-02 21:32 ` Junio C Hamano
2022-02-02 21:32 ` Junio C Hamano
2022-02-03 23:55 ` Junio C Hamano
2022-01-29 18:07 ` [PATCH v2 11/13] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-02-02 21:32 ` Junio C Hamano
2022-02-02 23:18 ` Elijah Newren
2022-02-03 1:08 ` Ævar Arnfjörð Bjarmason
2022-02-03 8:39 ` Elijah Newren
2022-01-29 18:07 ` [PATCH v2 12/13] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-02-02 21:32 ` Junio C Hamano
2022-01-29 18:07 ` [PATCH v2 13/13] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 00/15] In-core git merge-tree ("Server side merges") Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 01/15] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 02/15] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 03/15] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-02-03 2:05 ` Ævar Arnfjörð Bjarmason
2022-02-03 9:04 ` Elijah Newren
2022-02-03 9:22 ` Elijah Newren
2022-02-03 9:45 ` Ævar Arnfjörð Bjarmason
2022-02-03 16:20 ` Elijah Newren
2022-02-03 17:15 ` Ævar Arnfjörð Bjarmason
2022-02-03 18:18 ` Elijah Newren
2022-02-03 10:26 ` Ævar Arnfjörð Bjarmason
2022-02-07 22:41 ` Emily Shaffer
2022-02-07 23:36 ` Junio C Hamano
2022-02-02 7:34 ` [PATCH v3 04/15] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-02-02 21:22 ` Junio C Hamano
2022-02-02 21:56 ` Elijah Newren
2022-02-02 22:01 ` Junio C Hamano
2022-02-03 0:18 ` Elijah Newren
2022-02-03 10:42 ` Johannes Altmanninger
2022-02-03 16:54 ` Elijah Newren
2022-02-21 9:06 ` Johannes Schindelin [this message]
2022-02-22 2:37 ` Elijah Newren
2022-02-03 20:05 ` Junio C Hamano
2022-02-21 18:55 ` Junio C Hamano
2022-02-22 16:26 ` Elijah Newren
2022-02-23 20:07 ` Junio C Hamano
2022-02-24 2:22 ` Elijah Newren
2022-02-24 20:04 ` Junio C Hamano
2022-02-24 23:36 ` Junio C Hamano
2022-02-27 17:35 ` Johannes Altmanninger
2022-02-27 17:35 ` Johannes Altmanninger
2022-02-22 16:45 ` Johannes Schindelin
2022-02-04 4:48 ` Josh Steadmon
2022-02-04 6:08 ` Elijah Newren
2022-02-02 7:34 ` [PATCH v3 05/15] Introduce a variant of the `warning()` function that takes a `FILE *` Johannes Schindelin via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 06/15] diff: allow diff_warn_rename_limit to write somewhere besides stderr Johannes Schindelin via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 07/15] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 08/15] merge-ort: allow update messages to be written to different file stream Elijah Newren via GitGitGadget
2022-02-03 1:48 ` Ævar Arnfjörð Bjarmason
2022-02-03 9:12 ` Elijah Newren
2022-02-03 10:01 ` Ævar Arnfjörð Bjarmason
2022-02-03 16:09 ` Elijah Newren
2022-02-03 16:19 ` Ævar Arnfjörð Bjarmason
2022-02-03 17:00 ` Elijah Newren
2022-02-21 9:13 ` Johannes Schindelin
2022-02-22 1:54 ` Elijah Newren
2022-02-22 16:48 ` Johannes Schindelin
2022-02-02 7:34 ` [PATCH v3 09/15] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 10/15] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 11/15] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 12/15] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-02-02 23:55 ` Ævar Arnfjörð Bjarmason
2022-02-03 5:19 ` Elijah Newren
2022-02-02 7:34 ` [PATCH v3 13/15] merge-tree: allow `ls-files -u` style info to be NUL terminated Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 14/15] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-02-02 7:34 ` [PATCH v3 15/15] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 00/12] In-core git merge-tree ("Server side merges") Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 01/12] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 02/12] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 03/12] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 04/12] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-02-14 17:51 ` Junio C Hamano
2022-02-15 6:03 ` Elijah Newren
2022-02-15 8:46 ` Ævar Arnfjörð Bjarmason
2022-02-12 20:34 ` [PATCH v4 05/12] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 06/12] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 07/12] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 08/12] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 09/12] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 10/12] merge-tree: allow `ls-files -u` style info to be NUL terminated Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 11/12] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-02-12 20:34 ` [PATCH v4 12/12] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 00/12] In-core git merge-tree ("Server side merges") Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 01/12] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 02/12] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 03/12] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 04/12] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-02-20 9:03 ` René Scharfe
2022-02-21 9:25 ` Johannes Schindelin
2022-02-22 2:28 ` Elijah Newren
2022-02-22 16:25 ` Johannes Schindelin
2022-02-20 6:54 ` [PATCH v5 05/12] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 06/12] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 07/12] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 08/12] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 09/12] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 10/12] merge-tree: allow `ls-files -u` style info to be NUL terminated Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 11/12] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-02-20 6:54 ` [PATCH v5 12/12] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
2022-02-22 16:26 ` Johannes Schindelin
2022-02-20 10:23 ` [PATCH v5 00/12] In-core git merge-tree ("Server side merges") Ævar Arnfjörð Bjarmason
2022-02-21 9:16 ` Johannes Schindelin
2022-02-22 2:08 ` Elijah Newren
2022-02-22 10:07 ` Ævar Arnfjörð Bjarmason
2022-02-23 7:46 ` [PATCH v6 " Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 01/12] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 02/12] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 03/12] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 04/12] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 05/12] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 06/12] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 07/12] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 08/12] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 09/12] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 10/12] merge-tree: allow `ls-files -u` style info to be NUL terminated Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 11/12] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-02-23 7:46 ` [PATCH v6 12/12] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
2022-02-23 23:13 ` [PATCH v6 00/12] In-core git merge-tree ("Server side merges") Junio C Hamano
2022-06-18 0:20 ` [PATCH v7 00/17] " Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 01/17] merge-tree: rename merge_trees() to trivial_merge_trees() Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 02/17] merge-tree: move logic for existing merge into new function Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 03/17] merge-tree: add option parsing and initial shell for real merge function Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 04/17] merge-tree: implement real merges Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 05/17] merge-ort: split out a separate display_update_messages() function Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 06/17] merge-tree: support including merge messages in output Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 07/17] merge-ort: provide a merge_get_conflicted_files() helper function Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 08/17] merge-ort: remove command-line-centric submodule message from merge-ort Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 09/17] merge-tree: provide a list of which files have conflicts Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 10/17] merge-tree: provide easy access to `ls-files -u` style info Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 11/17] merge-ort: store messages in a list, not in a single strbuf Johannes Schindelin via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 12/17] merge-ort: make `path_messages` a strmap to a string_list Johannes Schindelin via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 13/17] merge-ort: store more specific conflict information Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 14/17] merge-ort: optionally produce machine-readable output Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 15/17] merge-tree: allow `ls-files -u` style info to be NUL terminated Elijah Newren via GitGitGadget
2022-06-18 0:20 ` [PATCH v7 16/17] merge-tree: add a --allow-unrelated-histories flag Elijah Newren via GitGitGadget
2022-06-18 0:21 ` [PATCH v7 17/17] git-merge-tree.txt: add a section on potentional usage mistakes Elijah Newren via GitGitGadget
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=nycvar.QRO.7.76.6.2202210956430.26495@tvgsbejvaqbjf.bet \
--to=johannes.schindelin@gmx.de \
--cc=aclopte@gmail.com \
--cc=avarab@gmail.com \
--cc=chriscool@tuxfamily.org \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=gitster@pobox.com \
--cc=j6t@kdbg.org \
--cc=l.s.r@web.de \
--cc=me@ttaylorr.com \
--cc=newren@gmail.com \
--cc=ramsay@ramsayjones.plus.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.
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).