1#!/bin/sh 2# 3# This is the git merge script, called with 4# 5# $1 - original file SHA1 (or empty) 6# $2 - file in branch1 SHA1 (or empty) 7# $3 - file in branch2 SHA1 (or empty) 8# $4 - pathname in repository 9# 10# 11# Handle some trivial cases.. The _really_ trivial cases have 12# been handled already by read-tree, but that one doesn't 13# do any merges that migth change the tree layout 14# 15 16# if the directory is newly added in a branch, it might not exist 17# in the current tree 18dir=$(dirname "$4") 19mkdir-p"$dir" 20 21case"${1:-.}${2:-.}${3:-.}"in 22# 23# deleted in both, or deleted in one and unchanged in the other 24# 25"$1.."|"$1.$1"|"$1$1.") 26rm-f --"$4" 27 update-cache --remove --"$4" 28exit0 29;; 30 31# 32# added in one, or added identically in both 33# 34".$2."|"..$3"|".$2$2") 35mv$(unpack-file "${2:-$3}") $4 36 update-cache --add --$4 37exit0 38;; 39 40# 41# Modified in both, but differently ;( 42# 43"$1$2$3") 44echo"Auto-merging$4" 45 orig=$(unpack-file $1) 46 src1=$(unpack-file $2) 47 src2=$(unpack-file $3) 48 merge "$src2""$orig""$src1" 49if[ $? -ne0];then 50echo Leaving conflict merge in$src2 51exit1 52fi 53cp"$src2""$4"&& update-cache --add --"$4"&&exit0 54;; 55 56*) 57echo"Not handling case$1->$2->$3" 58;; 59esac 60exit1