implement init command
diff --git a/git-flow b/git-flow
index a3ec592..04868aa 100755
--- a/git-flow
+++ b/git-flow
@@ -22,6 +22,7 @@
export MASTER_BRANCH=$(git config --get gitflow.branch.master || echo master)
export DEVELOP_BRANCH=$(git config --get gitflow.branch.develop || echo develop)
export ORIGIN=$(git config --get gitflow.origin || echo origin)
+export README=$(git config --get gitflow.readme || echo README)
warn() { echo "$@" >&2; }
die() { warn "$@"; exit 1; }
@@ -36,6 +37,7 @@
echo "gitflow, version $GITFLOW_VERSION"
echo
echo "usage: git flow <cmd> <type> <args>"
+ echo " git flow init [<url>]"
echo
echo "<type> can be any of: feature, release, hotfix, support"
echo
@@ -43,15 +45,20 @@
}
main() {
- if [ $# -lt 2 ]; then
+ if [ $# -lt 1 ]; then
usage
exit 1
fi
# sanity checks
- ACTION="$1"
- BTYPE="$2"
- shift 2
+ ACTION="$1"; shift
+
+ if [ "$ACTION" = "init" ]; then
+ gitflow_init "$@"
+ exit 0
+ fi
+
+ BTYPE="$1"; shift
if [ ! -e "$GITFLOW_DIR/git-flow-$BTYPE" ]; then
usage
@@ -79,6 +86,60 @@
cmd_$ACTION "$@"
}
+gitflow_init() {
+ echo
+ echo "Summary of actions:"
+
+ if ! git rev-parse --git-dir &>/dev/null; then
+ git init --quiet
+ echo "- A new git repository at $PWD was created"
+ fi
+
+ if ! git rev-parse --quiet --verify HEAD >/dev/null; then
+ touch $README
+ git add $README
+ git commit --quiet -m "initial commit"
+ if [ "$MASTER_BRANCH" != "master" ]; then
+ git branch -m master $MASTER_BRANCH
+ fi
+ echo "- An initial commit was created at branch '$MASTER_BRANCH'"
+ fi
+
+ if ! git rev-parse --verify $MASTER_BRANCH &>/dev/null; then
+ die "Cannot find your master branch. Try: git branch -m <mymaster> $MASTER_BRANCH"
+ fi
+
+ gitflow_check_clean_working_tree
+
+ if git remote | grep -q $ORIGIN; then
+ git fetch -q $ORIGIN
+ gitflow_require_branches_equal $MASTER_BRANCH $ORIGIN/$MASTER_BRANCH
+ fi
+
+ if git rev-parse --verify $DEVELOP_BRANCH &>/dev/null; then
+ gitflow_require_branches_equal $DEVELOP_BRANCH $ORIGIN/$DEVELOP_BRANCH
+ else
+ git checkout -q -b $DEVELOP_BRANCH $MASTER_BRANCH
+ echo "- A new branch '$DEVELOP_BRANCH' was created"
+ echo "- You are now on branch '$DEVELOP_BRANCH'"
+ fi
+
+ if ! git remote | grep -q $ORIGIN; then
+ if [ "$1" = "" ]; then
+ echo "- No remote location was added. Try: git remote add $ORIGIN <url>"
+ else
+ git remote add $ORIGIN $1
+ echo "- A new remote location '$1' was added"
+ fi
+ fi
+
+ echo
+
+ if git remote | grep -q $ORIGIN; then
+ git push $ORIGIN $MASTER_BRANCH $DEVELOP_BRANCH
+ fi
+}
+
gitflow_check_clean_working_tree() {
if ! git diff --no-ext-diff --ignore-submodules --quiet --exit-code; then
die "Working tree contains unstaged changes. Aborting ..."