16fb8f217e17d4dfcf4e652d0ea633a33d559737
   1#!/bin/bash -x
   2. shellopts.sh
   3set -e
   4
   5rm -rf mainline subproj
   6mkdir mainline subproj
   7
   8cd subproj
   9git init
  10
  11touch sub1
  12git add sub1
  13git commit -m 'sub-1'
  14git branch sub1
  15git branch -m master subproj
  16
  17touch sub2
  18git add sub2
  19git commit -m 'sub-2'
  20git branch sub2
  21
  22touch sub3
  23git add sub3
  24git commit -m 'sub-3'
  25git branch sub3
  26
  27cd ../mainline
  28git init
  29touch main1
  30git add main1
  31git commit -m 'main-1'
  32git branch -m master mainline
  33
  34git fetch ../subproj sub1
  35git branch sub1 FETCH_HEAD
  36git subtree add --prefix=subdir FETCH_HEAD
  37
  38# this shouldn't actually do anything, since FETCH_HEAD is already a parent
  39git merge -m 'merge -s -ours' -s ours FETCH_HEAD
  40
  41touch subdir/main-sub3
  42git add subdir/main-sub3
  43git commit -m 'main-sub3'
  44
  45touch main-2
  46git add main-2
  47git commit -m 'main-2 boring'
  48
  49touch subdir/main-sub4
  50git add subdir/main-sub4
  51git commit -m 'main-sub4'
  52
  53git fetch ../subproj sub2
  54git branch sub2 FETCH_HEAD
  55git subtree merge --prefix=subdir FETCH_HEAD
  56git branch pre-split
  57
  58split1=$(git subtree split --prefix subdir --onto FETCH_HEAD --rejoin)
  59echo "split1={$split1}"
  60git branch split1 "$split1"
  61
  62touch subdir/main-sub5
  63git add subdir/main-sub5
  64git commit -m 'main-sub5'
  65
  66cd ../subproj
  67git fetch ../mainline split1
  68git branch split1 FETCH_HEAD
  69git merge FETCH_HEAD
  70
  71touch sub6
  72git add sub6
  73git commit -m 'sub6'
  74
  75cd ../mainline
  76split2=$(git subtree split --prefix subdir --rejoin)
  77git branch split2 "$split2"
  78
  79touch subdir/main-sub7
  80git add subdir/main-sub7
  81git commit -m 'main-sub7'
  82
  83split3=$(git subtree split --prefix subdir --rejoin)
  84git branch split3 "$split3"
  85
  86cd ../subproj
  87git fetch ../mainline split3
  88git branch split3 FETCH_HEAD
  89git merge FETCH_HEAD
  90git branch subproj-merge-split3
  91
  92cd ../mainline
  93git fetch ../subproj subproj-merge-split3
  94git branch subproj-merge-split3 FETCH_HEAD
  95git subtree pull --prefix=subdir ../subproj subproj-merge-split3