From: Jakub Narebski Date: Sun, 26 Sep 2010 10:17:19 GMT Subject: Re: custom merge driver vs. CONFLICT (delete/modify) Message-ID: In-Reply-To: <1285445444-sup-3857@flatty.sascha.silbe.org> Sascha Silbe writes: > I am (automatically) building snapshot packages by combining the packaging > maintained in one repository (but also containing sources) with (more > recent) upstream sources from another repository. > > For some files (those touched by rerunning auto*) I want the local > version to always take precedence. For some other files (autogen.sh, PO > files) I want the upstream version to take precedence. For all the rest > I want conflicts to produce an error. > > This has worked fine so far by using custom merge drivers, but while > adding the second one I encountered a problem: Merge drivers are only > invoked for modify/modify (and maybe add/add) conflicts. > More specifically a delete/modify conflict will cause git-merge to bail > out directly without calling the merge driver to resolve the conflict. > Such a conflict occurred because the packaging people removed autogen.sh > (which is reasonable for them, but not for me). > > Is there a way to either resolve all kinds of conflicts in favour of > one side (like -X ) or always take one side (like -s ) for > a specific set of files? > Alternatively, is there a way to do a merge in multiple "steps", > operating only on a subset of the files each time (so I can use > -s / -X for two of three steps per merge)? Well, you can create your own merge strategy (see git-merge-ours.sh in contrib/examples/ as an example), put it in appropriate place, and use '--strategy=' to force using your own custom merge strategy. The problem you see is that merge *driver* (as set by gitattributes) deals only with _file-level_ conflicts, i.e. it is run instead of ordinary diff3-based merge. The CONFLICT(Delete/modify) is solved on the _tree_ level by a merge *strategy*. Currently there is no way to change how tree-level conflict is resolved, without creating your own merge strategy. Though in princile it doesn't seem impossible... -- Jakub Narebski Poland ShadeHawk on #git