#!/bin/sh # A <- create some files # / \ # B C <- cause rename/delete conflicts between B and C # / \ # |\ /| # | D E | # | \ / | # | X | # | / \ | # | / \ | # |/ \| # F G <- merge E into B, D into C # \ / # \ / # \ / # H <- recursive merge crashes # # initialize rm -rf crash-test mkdir crash-test cd crash-test git init mkdir data # create a bunch of files n=1 while (( $n <= 10 )); do echo $n > data/$n; n=$(($n+1)) done # check them in git add data git commit -m A git branch A # remove a file in one branch git checkout -b B A git rm data/9 git add data git commit -m B # with a branch off of it git branch D # put some commits on D git checkout D echo testD > data/testD git add data git commit -m D # back up to the top, create another branch and cause a rename # conflict with the file we deleted earlier git checkout -b C A git mv data/9 data/new-9 git add data git commit -m C # with a branch off of it git branch E # put a commits on E git checkout E echo testE > data/testE git add data git commit -m E # now, merge E into B git checkout B git merge E git add data git commit -m F git branch F # and merge D into C git checkout C git merge D git add data git commit -m G git branch G # now, force a recursive merge between F and G GIT_MERGE_VERBOSITY=5 git merge F # segfault :(