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