From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: git@vger.kernel.org
Subject: [Summit topic] Server-side merge/rebase: needs and wants?
Date: Thu, 21 Oct 2021 13:56:06 +0200 (CEST) [thread overview]
Message-ID: <nycvar.QRO.7.76.6.2110211147490.56@tvgsbejvaqbjf.bet> (raw)
In-Reply-To: <nycvar.QRO.7.76.6.2110211129130.56@tvgsbejvaqbjf.bet>
[-- Attachment #1: Type: text/plain, Size: 5823 bytes --]
This session was led by Elijah Newren. Supporting cast: Christian Couder,
Jonathan "jrnieder" Nieder, brian m. carlson, Toon Claes, Orgad Shaneh,
Johannes "Dscho" Schindelin, Derrick Stolee, Philip Oakley, Jeff "Peff"
King, CB Bailey, Ævar Arnfjörð Bjarmason, and Phillip Wood.
Notes:
1. https://github.com/git/git/pull/1114
2. Not about exposing merge over Git protocol, but about providing plumbing
for a server to use to run a merge
3. Not only merge/rebase, but also cherry-pick, revert
4. merge-ORT makes things a bit better, as it doesn’t have some of the
problems of the recursive algorithm.
5. The challenge is not necessarily the technical challenges, but the UX for
server tools that live “above” the git executable.
1. What kind of output is needed? Machine-readable error messages?
2. What Git objects must be created: a tree? A commit?
3. How to handle, report, and store conflicts? Index is not typically
available on the server.
6. Use case?
1. Currently servers use libgit2 to do these algorithms instead of git
itself.
2. What would it take for us to move the servers off of libgit2 and onto
Git?
3. This would help with a lot of compatibility issues (sha-256, new data
formats)
4. Server cares about the exit code to record the success of the
operation, including some details around which conflicts happened.
5. MUST NOT WRITE A REF in-process (because of replication), so must be
at a deep plumbing level.
6. How to restart the merge once a user has submitted conflict
resolutions?
7. Christian: GitLab also uses libgit2, would like to use C Git. Want to
not need a worktree for scratch space.
8. jrnieder: Write tree with conflict markers and report the conflict
(just a boolean), at least as an optional mode (JGit does this and
Gerrit relies on it)
1. Including when merging binary files, rename conflicts, etc where
there’s no place to put the conflict markers
9. brian: fail-fast mode. Present that a conflict happens very quickly,
allow conflict marker computation to be done later, upon user request
or as a background job.
10. Toon: GitLab would love to use merge ORT, and collaborate on it
11. Orgad: In case you do have conflicts, does a mergetool-style frontend
want the three competing versions?
7. Dscho: there’s a little-used “git merge-tree” plumbing command
1. jrnieder: it’s a low-level doesn’t-resolve-conflicts thing, but nothing
forces us to keep it that way. Intriguing idea
8. Difference between rebase and cherry-pick not all that big, apart from
looking at HEAD (which does not make sense on the server-side)
9. --onto already strains the concept of the rebase, should maybe not be
implicit.
10. Stolee: Think about future extensibility: e.g., servers might want to
support --autosquash
11. It would be nice to rebase multiple, interconnected branches at the same
time. But how to specify that?
12. Dscho: I have this problem quite often with my many stacked patch series
13. I use --recreate-merges (uses “label” command), create refs along the way
14. Philip: I also rebase with merges and then run a script after the fact to
update refs
15. Peff: I do something lower-tech. When I have branches depending on each
other, I set the upstream config. By doing rebases in the right order, the
right thing happens.
16. CB: This feature sounds really exciting, often develops parallel,
semi-independent changes that only come together in an octopus merge at
the end
17. Jonathan: Newcomers sometimes put commits that don’t belong together on
the same branch; I wish there were a smooth way for them to just “drag
over” a commit, which we don’t currently have because it involves multiple
branches. Cheering you on.
18. cherry-pick in the middle of an interrupted rebase
19. If we unify them, then this gets messy
20. Dscho: I’m a strong proponent of being able to cherry-pick while you’re
rebasing. But I’m also missing the ability to do an interactive rebase in
the middle of an interactive rebase. I implemented a nested interactive
rebase in the tooling for Git for Windows, which works by prepending the
current interactive rebase’s todo
21. Peff: That works in that context, but is not fully generic (no way to
--abort / --quit). Would want a stack of operations. I have a command
called “git continue” that continues whatever operation is in progress.
22. Once we have every high-level operation pushing / popping like this, that
kind of thing becomes possible.
23. Toon: I have that too, also “git abort”
24. CB: “git abort ” is slightly terrifying, we started with git shell and now
we have git forth :)
25. Dscho: could standardize on the git-rebase-todo script and add support for
other operations, tricky bit would be how to implemented nested commands
in an abortable fashion
26. Ævar: would be nice if these are pushable/sharable
27. Is rebase the right top-level command?
28. Phillip Wood: for refactoring history, would like a different abstraction
from rebase
29. I have a script that does that which works well
30. jrnieder: https://github.com/arxanas/git-branchless has some non rebase
based history manipulation helpers as well, can be useful for inspiration
31. Elijah: I’m thinking of a “git replay” command
next prev parent reply other threads:[~2021-10-21 11:56 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-21 11:55 Notes from the Git Contributors' Summit 2021, virtual, Oct 19/20 Johannes Schindelin
2021-10-21 11:55 ` [Summit topic] Crazy (and not so crazy) ideas Johannes Schindelin
2021-10-21 12:30 ` Son Luong Ngoc
2021-10-26 20:14 ` scripting speedups [was: [Summit topic] Crazy (and not so crazy) ideas] Eric Wong
2021-10-30 19:58 ` Ævar Arnfjörð Bjarmason
2021-11-03 9:24 ` test suite speedups via some not-so-crazy ideas (was: scripting speedups[...]) Ævar Arnfjörð Bjarmason
2021-11-03 22:12 ` test suite speedups via some not-so-crazy ideas Junio C Hamano
2021-11-02 13:52 ` scripting speedups [was: [Summit topic] Crazy (and not so crazy) ideas] Johannes Schindelin
2021-10-21 11:55 ` [Summit topic] SHA-256 Updates Johannes Schindelin
2021-10-21 11:56 ` Johannes Schindelin [this message]
2021-10-22 3:06 ` [Summit topic] Server-side merge/rebase: needs and wants? Bagas Sanjaya
2021-10-22 10:01 ` Johannes Schindelin
2021-10-23 20:52 ` Ævar Arnfjörð Bjarmason
2021-11-08 18:21 ` Taylor Blau
2021-11-09 2:15 ` Ævar Arnfjörð Bjarmason
2021-11-30 10:06 ` Christian Couder
2021-10-21 11:56 ` [Summit topic] Submodules and how to make them worth using Johannes Schindelin
2021-10-21 11:56 ` [Summit topic] Sparse checkout behavior and plans Johannes Schindelin
2021-10-21 11:56 ` [Summit topic] The state of getting a reftable backend working in git.git Johannes Schindelin
2021-10-25 19:00 ` Han-Wen Nienhuys
2021-10-25 22:09 ` Ævar Arnfjörð Bjarmason
2021-10-26 8:12 ` Han-Wen Nienhuys
2021-10-28 14:17 ` Philip Oakley
2021-10-26 15:51 ` Philip Oakley
2021-10-21 11:56 ` [Summit topic] Documentation (translations, FAQ updates, new user-focused, general improvements, etc.) Johannes Schindelin
2021-10-22 14:20 ` Jean-Noël Avila
2021-10-22 14:31 ` Ævar Arnfjörð Bjarmason
2021-10-27 7:02 ` Jean-Noël Avila
2021-10-27 8:50 ` Jeff King
2021-10-21 11:56 ` [Summit topic] Increasing diversity & inclusion (transition to `main`, etc) Johannes Schindelin
2021-10-21 12:55 ` Son Luong Ngoc
2021-10-22 10:02 ` vale check, was " Johannes Schindelin
2021-10-22 10:03 ` Johannes Schindelin
2021-10-21 11:57 ` [Summit topic] Improving Git UX Johannes Schindelin
2021-10-21 16:45 ` changing the experimental 'git switch' (was: [Summit topic] Improving Git UX) Ævar Arnfjörð Bjarmason
2021-10-21 23:03 ` changing the experimental 'git switch' Junio C Hamano
2021-10-22 3:33 ` changing the experimental 'git switch' (was: [Summit topic] Improving Git UX) Bagas Sanjaya
2021-10-22 14:04 ` martin
2021-10-22 14:24 ` Ævar Arnfjörð Bjarmason
2021-10-22 15:30 ` martin
2021-10-23 8:27 ` changing the experimental 'git switch' Sergey Organov
2021-10-22 21:54 ` Sergey Organov
2021-10-24 6:54 ` changing the experimental 'git switch' (was: [Summit topic] Improving Git UX) Martin
2021-10-24 20:27 ` changing the experimental 'git switch' Junio C Hamano
2021-10-25 12:48 ` Ævar Arnfjörð Bjarmason
2021-10-25 17:06 ` Junio C Hamano
2021-10-25 16:44 ` Sergey Organov
2021-10-25 22:23 ` Ævar Arnfjörð Bjarmason
2021-10-27 18:54 ` Sergey Organov
2021-10-21 11:57 ` [Summit topic] Improving reviewer quality of life (patchwork, subsystem lists?, etc) Johannes Schindelin
2021-10-21 13:41 ` Konstantin Ryabitsev
2021-10-22 22:06 ` Ævar Arnfjörð Bjarmason
2021-10-22 8:02 ` Missing notes, was Re: Notes from the Git Contributors' Summit 2021, virtual, Oct 19/20 Johannes Schindelin
2021-10-22 8:22 ` Johannes Schindelin
2021-10-22 8:30 ` Johannes Schindelin
2021-10-22 9:07 ` Johannes Schindelin
2021-10-22 9:44 ` Let's have public Git chalk talks, " Johannes Schindelin
2021-10-25 12:58 ` Ævar Arnfjörð Bjarmason
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.2110211147490.56@tvgsbejvaqbjf.bet \
--to=johannes.schindelin@gmx.de \
--cc=git@vger.kernel.org \
/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).