blob: 4c33b2daacfaa076e84013b1f0f4c5eb5e6cd4d9 [file] [log] [blame]
Benedikt Böhm00ccea62010-01-26 12:39:36 +01001#
Vincent Driessen6c2d30b2010-01-26 22:18:36 +01002# git-flow -- A collection of Git extensions to provide high-level
3# repository operations for Vincent Driessen's branching model.
Benedikt Böhm00ccea62010-01-26 12:39:36 +01004#
5# Original blog post presenting this model is found at:
6# http://nvie.com/archives/323
7#
8# Feel free to contribute to this project at:
9# http://github.com/nvie/gitflow
10#
11# Copyright (c) 2010 by Vincent Driessen
12# Copyright (c) 2010 by Benedikt Böhm
13#
14
Benedikt Böhm49dd62b2010-01-28 00:51:15 +010015VERSION_PREFIX=$(git config --get gitflow.prefix.versiontag)
16PREFIX=$(git config --get gitflow.prefix.support || echo support/)
Vincent Driessen2acfffd2010-01-29 12:37:22 +010017FLAG_FETCH=1
Benedikt Böhm49dd62b2010-01-28 00:51:15 +010018
Benedikt Böhm00ccea62010-01-26 12:39:36 +010019usage() {
Vincent Driessenb866b012010-01-28 01:01:53 +010020 echo "usage: git flow support [list]"
Vincent Driessen170dc742010-01-28 00:20:51 +010021 echo " git flow support start <version> [<base>]"
Benedikt Böhm00ccea62010-01-26 12:39:36 +010022}
23
Vincent Driessenb866b012010-01-28 01:01:53 +010024cmd_default() {
25 cmd_list "$@"
Benedikt Böhm00ccea62010-01-26 12:39:36 +010026}
27
Vincent Driessenb866b012010-01-28 01:01:53 +010028cmd_list() {
Vincent Driessen170dc742010-01-28 00:20:51 +010029 SUPPORT_BRANCHES="$(echo "$LOCAL_BRANCHES" | grep "^$PREFIX")"
30 if [ -z "$SUPPORT_BRANCHES" ]; then
31 warn "No support branches exist."
32 exit 0
33 fi
34 echo "$SUPPORT_BRANCHES" | sed "s?^$PREFIX??g"
35}
36
Benedikt Böhm00ccea62010-01-26 12:39:36 +010037cmd_help() {
38 usage
39 exit 0
40}
41
Benedikt Böhm00ccea62010-01-26 12:39:36 +010042parse_args() {
Vincent Driessen2acfffd2010-01-29 12:37:22 +010043 # TODO: When we have a nice structured way of parsing flags with getopt,
44 # implement the following flags:
45 # --fetch, to set FLAG_FETCH=1
46 # --no-fetch, to set FLAG_FETCH=0
Benedikt Böhm00ccea62010-01-26 12:39:36 +010047 VERSION="$1"
48 BASE="${2:-${VERSION_PREFIX}${VERSION}}"
49 if [ "$VERSION" = "" ]; then
50 echo "Missing argument <version>."
51 usage
52 exit 1
53 fi
54 BRANCH=$PREFIX$VERSION
55}
56
Benedikt Böhm00ccea62010-01-26 12:39:36 +010057cmd_start() {
58 parse_args "$@"
59
60 # sanity checks
Vincent Driessen48386442010-01-29 10:30:40 +010061 gitflow_require_clean_working_tree
Benedikt Böhm00ccea62010-01-26 12:39:36 +010062
Vincent Driessen2acfffd2010-01-29 12:37:22 +010063 # fetch remote changes
64 if [ $FLAG_FETCH -eq 1 ]; then
65 git fetch -q $ORIGIN $BASE
66 fi
67 gitflow_require_branches_equal $BRANCH $ORIGIN/$BRANCH
68
Benedikt Böhm00ccea62010-01-26 12:39:36 +010069 # create branch
70 git checkout -b $BRANCH $BASE
71
72 # publish branch
Benedikt Böhm350e7152010-01-26 13:05:05 +010073 git push $ORIGIN $BRANCH:refs/heads/$BRANCH
Vincent Driessen2acfffd2010-01-29 12:37:22 +010074
Benedikt Böhm350e7152010-01-26 13:05:05 +010075 git config branch.$BRANCH.remote $ORIGIN
Benedikt Böhm00ccea62010-01-26 12:39:36 +010076 git config branch.$BRANCH.merge refs/heads/$BRANCH
Vincent Driessena7d45272010-01-26 23:49:47 +010077 git checkout $BRANCH
Benedikt Böhm00ccea62010-01-26 12:39:36 +010078
79 echo
80 echo "Summary of actions:"
81 echo "- A new remote branch '$BRANCH' was created, based on '$BASE'"
82 echo "- A new tracking branch '$BRANCH' was created"
83 echo "- You are now on branch '$BRANCH'"
84 echo
85}