diff --git a/sys/lib/git/common.rc b/sys/lib/git/common.rc
index 320439ab0..43ea17895 100644
--- a/sys/lib/git/common.rc
+++ b/sys/lib/git/common.rc
@@ -29,13 +29,23 @@ fn drop {
 	' $*
 }
 
-fn present {
+fn mergeperm {
 	if(~ $1 /dev/null && cmp $2 $3>/dev/null)
 		status=gone
 	if not if (~ $3 /dev/null && cmp $1 $2>/dev/null)
 		status=gone
-	if not
+	if not {
+		mergedperms='-x'
+		if(test -x $2){
+			if(test -x $1 -a -x $3)
+				mergedperms='+x'
+		}
+		if not{
+			if(test -x $1 -o -x $3)
+				mergedperms='+x'
+		}
 		status=()
+	}
 }
 
 fn whoami{
@@ -73,13 +83,13 @@ fn merge1 {@{
 		base=/dev/null
 	if(! test -f $theirs)
 		theirs=/dev/null
-	mkdir -p `{basename -d $tmp}
 	if(! ape/diff3 -3 -m $ours $base $theirs > $tmp)
 		echo merge needed: $out >[1=2]
 
-	if(present $ours $base $theirs){
+	if(mergeperm $ours $base $theirs){
 		mv $tmp $out
 		git/add $out
+		chmod $mergedperms $out
 	}
 	if not {
 		rm -f $tmp $out