set -- -h
fi
OPTS_SPEC="\
-git subtree split [options...] <commit...> -- <path>
+git subtree split [options...] <--prefix=prefix> <commit...> -- <path>
git subtree merge
-
-git subtree does foo and bar!
--
h,help show the help
q quiet
-v verbose
+prefix= the name of the subdir to split out
onto= try connecting new tree to an existing one
rejoin merge the new branch back into HEAD
ignore-joins ignore prior --rejoin commits
shift
case "$opt" in
-q) quiet=1 ;;
+ --prefix) prefix="$1"; shift ;;
+ --no-prefix) prefix= ;;
--onto) onto="$1"; shift ;;
--no-onto) onto= ;;
--rejoin) rejoin=1 ;;
esac
revs=$(git rev-parse --default HEAD --revs-only "$@") || exit $?
-dirs="$(git rev-parse --sq --no-revs --no-flags "$@")" || exit $?
-#echo "dirs is {$dirs}"
-eval $(echo set -- $dirs)
-if [ "$#" -ne 1 ]; then
- die "Must provide exactly one subtree dir (got $#)"
+if [ -z "$prefix" ]; then
+ die "You must provide the --prefix option."
+fi
+dir="$prefix"
+
+dirs="$(git rev-parse --no-revs --no-flags "$@")" || exit $?
+if [ -n "$dirs" ]; then
+ die "Error: Use --prefix instead of bare filenames."
fi
-dir="$1"
debug "command: {$command}"
debug "quiet: {$quiet}"
unrevs="$(find_existing_splits "$dir" "$revs")"
fi
- debug "git rev-list --reverse $revs $unrevs"
- git rev-list --reverse --parents $revs $unrevsx |
+ # We can't restrict rev-list to only "$dir" here, because that leaves out
+ # critical information about commit parents.
+ debug "git rev-list --reverse --parents $revs $unrevs"
+ git rev-list --reverse --parents $revs $unrevs |
while read rev parents; do
debug
debug "Processing commit: $rev"
git merge -s subtree FETCH_HEAD
git branch pre-split
-split1=$(git subtree split --onto FETCH_HEAD subdir --rejoin)
+split1=$(git subtree split --prefix subdir --onto FETCH_HEAD --rejoin)
echo "split1={$split1}"
git branch split1 "$split1"
git commit -m 'sub6'
cd ../mainline
-split2=$(git subtree split subdir --rejoin)
+split2=$(git subtree split --prefix subdir --rejoin)
git branch split2 "$split2"
touch subdir/main-sub7
git add subdir/main-sub7
git commit -m 'main-sub7'
-split3=$(git subtree split subdir --rejoin)
+split3=$(git subtree split --prefix subdir --rejoin)
git branch split3 "$split3"
cd ../subproj