From: Victor Engmark <victor.engmark@terreactive.ch>
To: Jeff King <peff@peff.net>
Cc: Jay Soffian <jaysoffian@gmail.com>,
Joshua Jensen <jjensen@workspacewhiz.com>,
"git@vger.kernel.org" <git@vger.kernel.org>
Subject: Where do all the tips go? (Was: Re: Sharing a massive distributed merge)
Date: Thu, 17 Mar 2011 08:51:58 +0100 [thread overview]
Message-ID: <4D81BD9E.1050601@terreactive.ch> (raw)
In-Reply-To: <10061287.5697.1300343903667.JavaMail.trustmail@mail1.terreactive.ch>
On 03/17/2011 07:38 AM, Jeff King wrote:
> On Thu, Mar 17, 2011 at 01:21:19AM -0400, Jay Soffian wrote:
>
>>> Git doesn't support distribution of a merge (although that would be
>>> extraordinarily cool), so the next best thing seemed to be force adding all
>>> files with conflict markers and then committing the merge. We then publish
>>> the conflicting branch and have each person fix their files. Given that the
>>> conflict markers are already in place, they can't use their favorite
>>> graphical merge tool.
>>
>> Well, this is awful, but you could do something like:
>>
>> for x in conflicted_files:
>> git show :1:$x > $x.base
>> git show :3:$x > $x.theirs
>> git checkout --ours $x
>> git add $x.base $x.theirs $x
>>
>> Commit that, then folks can use their favorite merge tools, commit the
>> result, and remove the .base and .theirs.
>
> I don't think you need to do anything so drastic. You can just have
> everybody do the partial merge, commit, and then push their result. And
> then as you suggest below, one person does the real merge, uses checkout
> to install the desired result state from each person's partial tree, and
> then everybody throws away their partial merges.
>
> The trick is that each person will resolve some conflicts and commit,
> but you need to know which ones they resolved. They can't leave things
> unmerged in the final commit. So they would have to provide such a list
> to you; one way is in the commit message[1].
>
> So let's say you have three devs, Alice, Bob, and Charlie, and one
> integrator, Matt, who will do the merge. Each of the developers does:
>
> git checkout -b partial-merge
> git merge old-topic
> git mergetool ;# or manually resolve and git add
>
> Eventually they get tired of the conflicts and give up. So they record
> the list of resolved paths, either manually or with something like[2]:
>
> {
> echo 'partial merge result'
> echo
>
> git status --porcelain | perl -ne '
> next if /^U|\?/;
> s/^\S+\s+//;
> print;
> '
>
> } >msg
>
> And then they stage the rest of it (knowing it will be ignored by Matt)
> and commit:
>
> git add -u
> git commit -F msg
> git push wherever partial-merge
>
> Then Matt does the actual merge:
>
> git merge old-topic
>
> which of course results in lots of conflicts. So he pulls resolved
> versions from each person's tree:
>
> for i in alice bob charlie; do
> git fetch $i
> git checkout $i/partial-merge -- \
> `git log -1 --format:%b $i/partial-merge`
> done
>
> And then fixes up whatever's left manually or with git-mergetool, and
> commits the end result.
>
> Take all of my scripting there as illustrative of the concept, but not
> necessarily a good idea. In particular, it doesn't handle quoting of
> filenames at all, and it probably doesn't handle files whose resolution
> was to be deleted (since the checkout will fail).
This discussion is great! Is there some place where this sort of a thing
usually ends up, such as a wiki or the Git Community Book
<http://book.git-scm.com/>?
Cheers,
--
Victor Engmark
next prev parent reply other threads:[~2011-03-17 7:52 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-16 20:12 Sharing a massive distributed merge Joshua Jensen
2011-03-17 5:21 ` Jay Soffian
2011-03-17 6:38 ` Jeff King
2011-03-17 7:04 ` Jay Soffian
2011-03-17 7:30 ` Jeff King
2011-03-18 5:49 ` Jeff King
2011-03-24 3:03 ` Joshua Jensen
2011-03-17 8:53 ` Alex Riesen
2011-03-17 14:10 ` Jay Soffian
2011-03-17 14:54 ` Alex Riesen
2011-03-17 17:58 ` Jay Soffian
2011-03-17 18:48 ` Alex Riesen
2011-03-17 19:15 ` Jeff King
2011-03-17 19:53 ` Alex Riesen
2011-03-17 20:54 ` Junio C Hamano
[not found] ` <10061287.5697.1300343903667.JavaMail.trustmail@mail1.terreactive.ch>
2011-03-17 7:51 ` Victor Engmark [this message]
2011-03-17 8:01 ` Where do all the tips go? (Was: Re: Sharing a massive distributed merge) Jeff King
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=4D81BD9E.1050601@terreactive.ch \
--to=victor.engmark@terreactive.ch \
--cc=git@vger.kernel.org \
--cc=jaysoffian@gmail.com \
--cc=jjensen@workspacewhiz.com \
--cc=peff@peff.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.
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).