Sascha Silbe <sascha-ml-reply-to-2010-3@xxxxxxxxx> 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 <side>) or always take one side (like -s <side>) 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 <side> / -X <side> 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=<name>' 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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html