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